2017-12-13 33 views
0

私はvirtualenvを使ってサブプロセスpopenを使って、システム全体のpythonと元の環境変数を必要とする別のプログラムを実行するスクリプトを実行しています。 virtualenvがそれに影響を与えないようにするには?私はサブプロセスがあなたを気にしないと信じてサブプロセスpopenとvirtualenvのやりとり

答えて

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

いいえ、私は実際にpopenでレールサーバーを起動しています。そのサーバーはpython2を期待しているため、pythonを使用してエラーが発生します。活性化せずにvirtualenvでpythonを使用すると問題を解決できますか? – kuan

+0

私はより明確な例を与えるためにそれを起動しました。私のIDEでスクリプトを直接実行するときは、起動せずに実行可能ファイルにパスを渡すだけです。あなたは正しい経路を与えましたか?上記の方法と同様に検証できますか? – gonczor

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) 
関連する問題