我们有一个使用Python 3.6.1的应用程序(以及Django,mod_wsgi,Rabbitmq等其他东西)。该应用程序的管理员最初是在Windows上构建的,我一直在将它转移到Linux上。为了让一切运行,我将应用程序移动到虚拟环境中。我现在遇到的问题是,我正在尝试调用之前使用过的各种第三方应用程序,其中一个是在自己的虚拟环境中设置的(使用Python 2.7)。我无法在新的Python 3环境中运行该应用程序。当我运行调用第三方应用程序的代码时,导入失败。我尝试对拒绝导入的文件进行更改,以进行Python 3兼容性所需的语法更改,但它仍然无法导入,我担心我必须为整个应用程序执行此操作。它仍然可能不起作用或是正确的方法。
我理解环境设置所做的部分工作是改变环境变量并在路径的开头放置它需要的东西,所以我觉得这两个环境是冲突的。我不知道如何让它发挥作用。有没有办法让两个虚拟环境协同工作?更具体地说,是否有一种让他们一起工作的好方法?
虚拟环境树包含一个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环境。