私はvirtualenvを使ってサブプロセスpopenを使って、システム全体のpythonと元の環境変数を必要とする別のプログラムを実行するスクリプトを実行しています。 virtualenvがそれに影響を与えないようにするには?私はサブプロセスがあなたを気にしないと信じてサブプロセスpopenとvirtualenvのやりとり
0
A
答えて
0
は
subprocess.run('/path/to/system/python program.py', stdout=PIPE, stderr=PIPE)
0
virtualenv
をvenv Pythonの実行可能ファイルのコピーを作成し、あなたの現在のシェルにそれを有効にすることができます。
これはあなたの$ PATHを変更します最初のエントリはvirtualenvの bin /ディレクトリです。 (ソースはシェルの 環境をインプレースに変更するため、ソースを使用する必要があります)。純粋に便利です。 virtualenvのbin /ディレクトリ(例:path/to/ENV/bin/pipまたは /path/to/ENV/bin/python-script.py)からスクリプトまたはPythonインタプリタを直接実行する場合は、活性化。
私は私のプロジェクトのためにvirtualenvの中のpythonを有効にしてきたときに、それが使用されます一つです。
[email protected]:~/Projects/papukurier/papukurier$ source ../venv/bin/activate
(venv) [email protected]:~/Projects/papukurier/papukurier$ which python
/home/gonczor/Projects/papukurier/venv/bin/python
(venv) [email protected]:~/Projects/papukurier/papukurier$ python
Python 2.7.14 (default, Sep 23 2017, 22:06:14)
[GCC 7.2.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.executable
'/home/gonczor/Projects/papukurier/venv/bin/python'
>>>
しかし同時に、あなたは他のpythonのインスタンスを実行するための完全なパスを与えることができますお使いのコンピュータ上:
(venv) [email protected]:~/Projects/papukurier/papukurier$ /usr/bin/python
Python 2.7.14 (default, Sep 23 2017, 22:06:14)
[GCC 7.2.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.executable
'/usr/bin/python'
>>>
0
あなたはenv=
でサブプロセスのために変更PATH
に渡すことができます。
from subprocess import Popen
from os import environ
from os.path import join as path_join
myenv = dict(**environ)
if 'VIRTUAL_ENV' in environ:
myenv['PATH'] = ':'.join(
[x for x in environ['PATH'].split(':')
if x != path_join(environ['VIRTUAL_ENV'], 'bin')])
Popen(['command', '--with', 'arguments'], env=myenv)
関連する問題
- 1. サブプロセスとpopenの問題
- 2. Pythonサブプロセス.Popen()とメッセージキュー(セロリ)
- 3. サブプロセスでコマンドを繰り返す.Popen
- 4. サブプロセスpopen Python
- 5. Pythonサブプロセス.Popenと非同期出力
- 6. サブプロセスPopenを使用するPopen
- 7. Pythonのサブプロセスpopenのデッドロック
- 8. Popenのサブプロセスの問題
- 9. Pythonの実行popenの()サブプロセスは
- 10. pythonのサブプロセスpopen非同期の理解
- 11. 連鎖のpopenのサブプロセスが適切に
- 12. サブプロセスcheck_output、Popen、getoutputの相違点python
- 13. サブプロセスから起動するとDrushがハングアップします.Popen
- 14. Python:サブプロセスとPopenを使って出力を出力する
- 15. サブプロセス32.Popenがクラッシュする(CPU 100%)
- 16. サブプロセスに文字を送信する.Popen
- 17. platform.popenからサブプロセスにポーティングする.Popen?
- 18. サブプロセスにコマンドを送信する.Popen()プロセス
- 19. Python:サブプロセスPopen stdoutをログファイルにリダイレクト
- 20. 出力をパイプするときにPythonのサブプロセスがPopenとしてハングする
- 21. MKMapView didDelectlectAnnotationViewとUITableViewとのやりとり
- 22. Androidアプリとフィットネスバンドとのやりとり
- 23. pyncとtweepyとのやりとり
- 24. gitクライアントとローカルファイルシステムとのやりとり
- 25. zf2 LoginServiceInterfaceとモデルとのやりとり
- 26. iPodのやりとり
- 27. アンドロイドアプリケーションのやりとり
- 28. クラスのやりとり
- 29. Androidサービスのやりとり
- 30. UIViewアニメーションのやりとり
いいえ、私は実際にpopenでレールサーバーを起動しています。そのサーバーはpython2を期待しているため、pythonを使用してエラーが発生します。活性化せずにvirtualenvでpythonを使用すると問題を解決できますか? – kuan
私はより明確な例を与えるためにそれを起動しました。私のIDEでスクリプトを直接実行するときは、起動せずに実行可能ファイルにパスを渡すだけです。あなたは正しい経路を与えましたか?上記の方法と同様に検証できますか? – gonczor