Joe*_*ate 10 python subprocess virtualenv travis-ci
对于某些功能测试,我使用Python subprocess.call
(或check_call
调用后者)直接从项目目录中调用几个实用程序.当全局安装库(特别是PyYAML)时,这很有效.运行virtualenv,例如在Travis-CI下,会导致问题,特别是如果virtualenv运行Python 3.x并且全局Python是2.7.
如果两个Pythons都是2.7,我仍然必须使用env
参数to 在virtualenv中注入PyYAML的位置,subprocess.call
以免引起ImportError.但是,当virtualenv为3.x时,这不起作用.看来调用的实用程序在virtualenv之外运行,因为它sys.path
看起来如下:
'/home/travis/build/jmafc/Pyrseas/pyrseas', '/usr/local/lib/python2.7/dist-packages/distribute-0.6.35-py2.7.egg', '/usr/local/lib/python2.7/dist-packages/pip-1.3.1-py2.7.egg', '/home/travis/build/jmafc/Pyrseas', '/home/travis/virtualenv/python3.3/lib/python3.3/site-packages', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-linux2', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/dist-packages', '/usr/local/lib/python2.7/dist-packages/setuptools-0.6c11-py2.7.egg-info', '/usr/lib/python2.7/dist-packages']
Run Code Online (Sandbox Code Playgroud)
注意2.7和3.3路径的混合,后者如上所述明确注入.
是否有一些方法可以从函数中virtualenv
或在subprocess
函数中确保子进程在virtualenv中"运行"?
jte*_*ace 20
如果传入环境变量的副本并使用当前的Python解释器作为子进程的目标,则应保留virtualenv环境.像这样的东西:
subprocess.call([sys.executable, 'yourscript.py'], env=os.environ.copy())
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3627 次 |
最近记录: |