如何在Python中处理冲突的虚拟环境

时间:2018-08-31 13:27:14

标签: python virtual environment

我们有一个使用Python 3.6.1(以及其他类似Django,mod_wsgi,Rabbitmq的东西)的应用程序。该应用程序的管理器最初是在Windows上构建的,我一直在将其转移到Linux。为了使一切正常运行,我将应用程序移到了虚拟环境中。我现在遇到的问题是,我正在尝试调用以前使用过的各种第三方应用程序,其中一个是在其自己的虚拟环境中设置的(使用Python 2.7)。我无法在新的Python 3环境中运行该应用程序。当我运行调用第三方应用程序的代码时,导入失败。我尝试对拒绝导入的文件进行更改,以进行Python 3兼容性所需的语法更改,但它仍然无法导入,我担心我必须为整个应用程序执行此操作。而且它仍然可能无法正常工作,或者是正确的方法。

我知道环境设置所做的部分工作是更改环境变量,并将其需要的内容放在路径的开头,因此,我认为这两个环境处于冲突状态是有意义的。我不知道如何使它工作。有什么方法可以使两个虚拟环境协同工作?更具体地说,是否有一种方式使他们一起工作?

1 个答案:

答案 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环境。