Python 获取virtualenv';脚本中的s bin文件夹路径

Python 获取virtualenv';脚本中的s bin文件夹路径,python,django,virtualenv,virtualenvwrapper,Python,Django,Virtualenv,Virtualenvwrapper,我在django项目中使用VirtualNVRapper,该项目有一个自动写入一些配置文件的管理任务,因此用户只需 ./manage.py generate_configuration > much_nice.conf 然后将文件移到其他位置。其中一个生成的配置文件是supervisord启动芹菜工人的任务。我遇到的问题是,我不知道如何输出virtualenv的bin文件夹中的芹菜可执行文件的路径。基本上,我想要命令的输出 which celery 一个选项是使用sys.executa

我在django项目中使用VirtualNVRapper,该项目有一个自动写入一些配置文件的管理任务,因此用户只需

./manage.py generate_configuration > much_nice.conf
然后将文件移到其他位置。其中一个生成的配置文件是supervisord启动芹菜工人的任务。我遇到的问题是,我不知道如何输出virtualenv的bin文件夹中的芹菜可执行文件的路径。基本上,我想要命令的输出

which celery
一个选项是使用
sys.executable
,获取文件夹(似乎是virtualenv的
bin
文件夹),就是它。。。但我不确定


virtualenv没有任何方法来获取路径本身吗?

虚拟环境的路径位于环境变量virtual\u env中

echo $VIRTUAL_ENV
您可以使用python来完成这些事情

>>> from fabric.api import local
>>> local('which celery')

只有在虚拟环境被激活时,
VIRTUAL_ENV
环境变量才可用

例如:

$python3-m venv myapp
$source myapp/bin/activate
(myapp)$python-c“导入操作系统;打印(os.envirtual['VIRTUAL_ENV'])”
/路径/to/virtualenv/myapp
如果未激活,则会出现异常:

(myapp)$deactivate
$myapp/bin/python-c“导入操作系统;打印(os.envirtual['VIRTUAL_ENV'])”
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“/usr/lib64/python3.4/os.py”,第635行,在__
从“无”提升钥匙错误(钥匙)
KeyError:“虚拟环境”
依我看,您应该使用获取Python可执行文件的路径, 然后建造通往芹菜的道路:

导入系统 导入操作系统 celery_name={'linux':'celery','win32':'celery.exe'}[sys.platform] celery\u path=os.path.join(os.path.dirname(sys.executable),celery\u name)
引用sys.prefix如何?无论是否激活virtualenv,它总是输出一个结果,而且它比获取sys.executable的父级位置更方便

$ python -c 'import sys;print(sys.prefix)'
/usr
$ . venv/bin/activate
(venv) $ python -c 'import sys;print(sys.prefix)'
path/to/venv

就这样,谢谢。我使用
os.envirtual['VIRTUAL_ENV']
在python中获得了值。请注意,
VIRTUAL_ENV
是由virtualenv的
activate
脚本设置的,可以在不激活virtualenv的情况下使用virtualenv python。请参阅:另外,conda不使用此变量。这将为使用CONDA或任何其他方式管理python发行版的用户提供支持。我认为这不是一个稳健的方法。使用@laurent laporte建议的
sys.executable
似乎更可靠。这可能行不通。启动的子shell不会将虚拟环境放在$PATH上,因此
将不起作用。