在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
,而不管标题看起来如何。