在virtualenv中执行os.system('python')

时间:2013-02-12 18:07:49

标签: python virtualenv os.system

我使用virtualenv执行脚本,在此脚本中我调用:

os.system('python anotherScript.py')

我的问题是脚本是否与调用者脚本在同一个virtualenv中执行?

2 个答案:

答案 0 :(得分:3)

很难说,但如果您在激活的virtualenv下运行此脚本,那么您应该处于该虚拟环境之下。您可以通过

验证您的想法
#script.py
import os
os.system('which python')

和命令行

virtualenv newvirtualenv
source newvirtualenv/bin/activate
(newvirtualenv) user@ubuntu: python script.py

你应该看到它在newvirtualenv/bin/python

通常,您希望使用exectuable标头来使用当前环境:

#!/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的版本,就可以了。

答案 1 :(得分:0)

例如使用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)