在virtualenv中执行os.system(';python';)
我正在使用一个在virtualenv中执行os.system(';python';),python,virtualenv,os.system,Python,Virtualenv,Os.system,我正在使用一个virtualenv来执行一个脚本,在这个脚本中我调用: os.system('python anotherScript.py') 我的问题是脚本是否与调用方脚本在相同的virtualenv中执行?很难说,但是如果您在激活的virtualenv下运行此脚本,您应该在该virutla环境下运行。你可以通过这样做来验证你的想法 #script.py import os os.system('which python') 从命令行 virtualenv newvirtualenv s
virtualenv
来执行一个脚本,在这个脚本中我调用:
os.system('python anotherScript.py')
我的问题是脚本是否与调用方脚本在相同的
virtualenv
中执行?很难说,但是如果您在激活的virtualenv下运行此脚本,您应该在该virutla环境下运行。你可以通过这样做来验证你的想法
#script.py
import os
os.system('which python')
从命令行
virtualenv newvirtualenv
source newvirtualenv/bin/activate
(newvirtualenv) user@ubuntu: python script.py
您应该看到它位于newvirtualenv/bin/python
通常,您希望放置一个可执行头以使用当前环境:
#!/usr/bin/env python
import os
os.system('which python')
这并不是说使用newvirtualenv
,但是如果脚本是在newvirtualenv
下执行的,那么它肯定是newvirtualenv
如果使用/usr/bin/python
,在virtualenv下仍然可以。但是对于高级程序员来说,他们往往有多个虚拟环境和多个python版本。因此,根据它们所在的位置,它们可以基于环境变量执行脚本。只是小小的收获
如果运行newvirtualenv/bin/python script.py
,它将处于virtualenv下
只要python二进制文件指向virtualenv的版本,就可以了。例如,使用anaconda管理虚拟环境,在Pycharm IDE中:
os.system('which python') # /usr/bin/python
command = 'python3 xxxx.py'
os.system(command) # make /usr/bin/python as interpreter
如果我想使用某些虚拟环境中安装的某些模块(如cv2)
command = '/path/to/anaconda3/envs/your_env_name/bin/python3 xxxx.py'
os.system(command)
确保可以使用
execfile
而不是os.system
。这将在当前解释器中执行脚本(包括所有上下站点),这取决于它在进程路径上找到的“python”。也许您可以将脚本设置为一个模块,并在线程中运行它?我使用了usr/bin/python
,它在virtualenv
下工作,thanks@HOAINAMNGUYEN我只想简单地重申我的观点。hashbang#/只要以/path/to/my/virtualenv/bin/python myscript.py
运行,usr/bin/python
就可以了。如果您只是运行python myscript.py
,而不是在激活的virtualenv下运行此python,那么您将使用系统范围的python运行它。因此,请确保激活您的virtualenv,或者始终指定/path/to/my/virtualenv/bin/python script.py
,而不管标题看起来如何。