Porównaj ceny domen i usług IT, sprzedawców z całego świata

Aktywuj virtualenv za pomocą skryptu Python


Chcę aktywować instancję virtualenv ze skryptu w języku Python.
Wiem, że jest to dość łatwe do zrobienia, ale wszystkie przykłady, które widziałem, używają go do uruchamiania poleceń w env, a następnie zamykania podprocesu.
Chcę tylko aktywować virtualenv i wrócić do powłoki, tak jak robi to bin/Activ.
Coś w tym stylu:
$me: my-script.py -d env-name
$(env-name)me:

Czy to możliwe?
Odpowiedni:

virtualenv ”wywołaj env ze skryptu

http://groups.google.com/group ... abeae
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Jeśli chcesz uruchomić podproces Pythona w virtualenv, możesz to zrobić, uruchamiając skrypt za pomocą interpretera Pythona znajdującego się w katalogu virtualenv/bin/:
import subprocess# Path to a Python interpreter that runs any Python script
# under the virtualenv/path/to/virtualenv/
python_bin = "/path/to/virtualenv/bin/python"# Path to the script that must run under the virtualenv
script_file = "must/run/under/virtualenv/script.py"subprocess.Popen([python_bin, script_file])

Jeśli jednak chcesz aktywować virtualenv w bieżącym interpreterze Pythona zamiast w podprocesie, możesz użyć skryptu
Activ_this.py
:
# Doing execfile() on this file will alter the current interpreter's
# environment so you can import libraries in the virtualenv
activate_this_file = "/path/to/virtualenv/bin/activate_this.py"execfile(activate_this_file, dict(__file__=activate_this_file))
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Najprostszym rozwiązaniem do uruchomienia skryptu w interpreterze virtualenv jest zastąpienie domyślnej linii shebang ścieżką do interpretera virtualenv, na przykład na początku skryptu:
#!/path/to/project/venv/bin/python

Spraw, aby skrypt był wykonywalny:
chmod u+x script.py

Uruchom skrypt:
./script.py

Voila!
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Okazuje się, że tak, problem nie jest prosty, ale jest rozwiązanie.
Najpierw musiałem stworzyć skrypt powłoki, aby opakować polecenie „source”. Jednak użyłem „.” zamiast tego, ponieważ przeczytałem, że lepiej jest go używać niż kodu źródłowego skryptów Bash.
#!/bin/bash./path/to/env/bin/activate

Następnie z mojego skryptu Python mogę po prostu zrobić to:
import os
os.system('/bin/bash --rcfile/path/to/myscript.sh')

Sztuczka tkwi w argumencie
--rcfile
.
Kiedy interpreter Pythona kończy pracę, pozostawia bieżącą powłokę w aktywowanym środowisku.
Zwycięstwo!
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Aby uruchomić inne środowisko Pythona zgodnie z oficjalnym

dokumentacja
https://virtualenv.pypa.io/en/ ... cript
Virtualenv, pełną ścieżkę do pliku wykonywalnego binarnego Pythona można określić w wierszu poleceń, tylko w ten sposób (nie ma potrzeby wcześniejszej aktywacji virtualenv):
/path/to/virtualenv/bin/python

To samo dotyczy sytuacji, gdy chcesz wywołać skrypt z wiersza poleceń za pomocą virtualenv. Nie musisz go wcześniej aktywować:
me$/path/to/virtualenv/bin/python myscript.py

To samo dla środowiska Windows (czy to z wiersza poleceń, czy ze skryptu):
> \path\to\env\Scripts\python.exe myscript.py
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Po prostu proste rozwiązanie, które działa dla mnie. Nie wiem, dlaczego potrzebujesz skryptu Bash, który w zasadzie robi bezużyteczny krok (czy się mylę?)
import os
os.system('/bin/bash --rcfile flask/bin/activate')

Który w zasadzie robi to, co chcesz:
[hellsing@silence Foundation]$ python2.7 pythonvenv.py
(flask)[hellsing@silence Foundation]$

Wtedy zamiast dezaktywować środowisko wirtualne, po prostu
<kbd>
Ctrl
</kbd>
+
<kbd>
D
</kbd>
lub wyjdź. Czy to możliwe rozwiązanie, czy nie to, czego chciałeś?
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Środowisko procesu dziecięcego jest tracone w momencie, gdy przestaje istnieć, a przeniesienie zawartości środowiska stamtąd do rodzica jest dość trudne.
Prawdopodobnie będziesz musiał utworzyć skrypt powłoki (możesz go wygenerować dynamicznie w/tmp), który wyprowadzi zmienne środowiskowe virtualenv do pliku, który zostanie następnie odczytany w procesie nadrzędnym w Pythonie i umieszczony w os.environ.
Lub po prostu przeanalizuj używany skrypt aktywacyjny dla linii w open („bin/Activ”), ręcznie pobierz zawartość i wstaw os.environ. Jest to trudne, ale nie niemożliwe.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Najlepsza odpowiedź działa tylko w Pythonie 2.x.
W przypadku Pythona 3.x użyj tego:
activate_this_file = "/path/to/virtualenv/bin/activate_this.py"exec(compile(open(activate_this_file, "rb").read(), activate_this_file, 'exec'), dict(__file__=activate_this_file))

Połączyć:
jaka jest alternatywa dla pliku wykonywalnego w Pythonie 3?

https://coderoad.ru/436198/
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Powinieneś utworzyć wszystkie swoje
virtualenv
w jednym folderze, na przykład
virt
.
Załóżmy, że nazwa twojego folderu to virtualenv-virt, chyba że ją zmienisz
cd
mkdir custom

Skopiuj poniższe wiersze ...
#!/usr/bin/env bash
ENV_PATH="$HOME/virt/$1/bin/activate"
bash --rcfile $ENV_PATH -i

Utwórz plik skryptu powłoki i wklej powyższe wiersze ...
touch custom/vhelper
nano custom/vhelper

Daj plikowi wykonywalnemu uprawnienia dostępu do pliku:
sudo chmod +x custom/vhelper

Teraz wyeksportuj tę niestandardową ścieżkę folderu, aby można ją było znaleźć w wierszu poleceń, naciskając klawisz tab ...
export PATH = $ PATH: "$ HOME/niestandardowe"
Teraz możesz go używać z dowolnego miejsca, wpisując po prostu następujące polecenie ...
vhelper YOUR_VIRTUAL_ENV_FOLDER_NAME

Załóżmy, że to abc ...
vhelper abc

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się