我们有一个使用Python 3.6.1(以及其他类似Django,mod_wsgi,Rabbitmq的东西)的应用程序。该应用程序的管理器最初是在Windows上构建的,我一直在将其转移到Linux。为了使一切正常运行,我将应用程序移到了虚拟环境中。我现在遇到的问题是,我正在尝试调用以前使用过的各种第三方应用程序,其中一个是在其自己的虚拟环境中设置的(使用Python 2.7)。我无法在新的Python 3环境中运行该应用程序。当我运行调用第三方应用程序的代码时,导入失败。我尝试对拒绝导入的文件进行更改,以进行Python 3兼容性所需的语法更改,但它仍然无法导入,我担心我必须为整个应用程序执行此操作。而且它仍然可能无法正常工作,或者是正确的方法。
我知道环境设置所做的部分工作是更改环境变量,并将其需要的内容放在路径的开头,因此,我认为这两个环境处于冲突状态是有意义的。我不知道如何使它工作。有什么方法可以使两个虚拟环境协同工作?更具体地说,是否有一种好方式使他们一起工作?
答案 0 :(得分:-1)
虚拟环境树包含一个bin
目录,setuptools将在其中安装存根程序以正确设置Python环境,然后在其中运行一些主要功能。这意味着您可以直接运行那些存根程序之一,而无需“激活”虚拟环境或设置任何环境变量。
如果您的目录树大致类似于:
\--.virtualenvs
+-- app-py37
| +-- bin
| | \-- app
| \-- lib
| \-- ...
| \-- app_main.py
+-- other-py27
+-- bin
| \-- helper
\-- lib
\-- ...
\-- helper_main.py
然后您通过类似的调用
来调用帮助程序import os
import subprocess
subprocess.run([os.path.join(os.environ('HOME'),
'.virtualenvs', 'other-py27', 'bin', 'helper'],
check=True)
我希望它能够正确设置自己的Python环境。