Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7 激活两个不同版本Python的virtualenv_Python 2.7_Python 3.x_Virtualenv - Fatal编程技术网

Python 2.7 激活两个不同版本Python的virtualenv

Python 2.7 激活两个不同版本Python的virtualenv,python-2.7,python-3.x,virtualenv,Python 2.7,Python 3.x,Virtualenv,我们有一个具有两个不同Python版本(2.7和3.5)的系统。 我们需要在Python3.5virtualenv上安装一些依赖项,但是Python2.7virtualenv已经为登录的用户激活,我们无法停用该virtualenv 我们想知道,是否有可能为同一用户同时激活不同Python版本的两个不同的virtualenv 我们尝试使用以下命令为Python2.7创建virtualenv: virtualenv -p /usr/bin/python2.7 env2.7 source env2.7

我们有一个具有两个不同Python版本(2.7和3.5)的系统。 我们需要在Python3.5
virtualenv
上安装一些依赖项,但是Python2.7
virtualenv
已经为登录的用户激活,我们无法停用该
virtualenv

我们想知道,是否有可能为同一用户同时激活不同Python版本的两个不同的
virtualenv

我们尝试使用以下命令为Python2.7创建virtualenv:

virtualenv -p /usr/bin/python2.7 env2.7
source env2.7/bin/activate 
激活后,我们使用以下命令为Python3创建了virtualenv:

virtualenv -p /usr/bin/python3 env3
source env3/bin/activate 

上面的命令激活了
env3
,我们想知道,它是否会影响我们在Python2.7 virtualenv中运行的应用程序。

由于Python2和Python3虚拟环境使用相同的shell变量来描述环境,您希望做的事情似乎很困难。但是,如果您只是希望能够在另一个虚拟环境处于活动状态时从一个虚拟环境运行程序,则可以通过以下方式实现。这假设您主要想要一个Python2虚拟环境,其中混合了一些Python3程序

  • 创建并填充Python2VirtualEnv

  • 创建Python3 virtualenv,为希望在Python2虚拟环境中使用的Python程序定义控制台入口点。通过构建虚拟环境来安装入口点

  • 将入口点“binaries”从Python3环境的/bin子目录复制到Python2虚拟环境的/bin子目录中


  • 如果查看入口点文件,您将看到它们已被赋予一个指向Python 3 VirtualEnvironment的Python解释器的命令,这足以确保它在正确的环境上下文中运行。

    因为Python 2和Python 3虚拟环境使用相同的shell变量来描述环境,你想做的事似乎很难。但是,如果您只是希望能够在另一个虚拟环境处于活动状态时从一个虚拟环境运行程序,则可以通过以下方式实现。这假设您主要想要一个Python2虚拟环境,其中混合了一些Python3程序

  • 创建并填充Python2VirtualEnv

  • 创建Python3 virtualenv,为希望在Python2虚拟环境中使用的Python程序定义控制台入口点。通过构建虚拟环境来安装入口点

  • 将入口点“binaries”从Python3环境的/bin子目录复制到Python2虚拟环境的/bin子目录中


  • 如果您查看入口点文件,您将看到它们已被提供一个指向Python 3 virtualenv的Python解释器的命令,这足以确保它在正确的环境上下文中运行。

    即使作为单个用户,您仍然可以运行shell的多个副本,每个程序都有自己的一组环境变量

    因此,很容易同时运行这两个虚拟环境。只需将命令包装在
    中即可

    试试这个:

    virtualenv -p /usr/bin/python3.5 p35-venv
    virtualenv -p /usr/bin/python2.7 p27-venv
    
    echo '
    (source p27-venv/bin/activate; python --version; sleep 5) &
    (source p35-venv/bin/activate; python --version; sleep 5) &
    ' > test.sh
    chmod a+x test.sh
    
    ./test.sh
    

    这将启动新的bash进程(命令周围的括号将在新的bash中运行该命令),然后激活其中的第一个venv,输出活动的Python版本并休眠5秒钟。这将在后台运行,
    test.sh
    脚本将在第一个括号结束之前继续执行第二个命令。第二个括号将启动第二个bash进程,激活其中的第二个venv,输出Python版本,并休眠5秒钟。这两个新的bash进程都是在后台并行运行的,因此在它们完成sleep命令之前,您将看到它们的输出。

    即使是单个用户,您仍然可以运行shell的多个副本,每个副本都有自己的一组环境变量供每个程序使用

    因此,很容易同时运行这两个虚拟环境。只需将命令包装在
    中即可

    试试这个:

    virtualenv -p /usr/bin/python3.5 p35-venv
    virtualenv -p /usr/bin/python2.7 p27-venv
    
    echo '
    (source p27-venv/bin/activate; python --version; sleep 5) &
    (source p35-venv/bin/activate; python --version; sleep 5) &
    ' > test.sh
    chmod a+x test.sh
    
    ./test.sh
    

    这将启动新的bash进程(命令周围的括号将在新的bash中运行该命令),然后激活其中的第一个venv,输出活动的Python版本并休眠5秒钟。这将在后台运行,
    test.sh
    脚本将在第一个括号结束之前继续执行第二个命令。第二个括号将启动第二个bash进程,激活其中的第二个venv,输出Python版本,并休眠5秒钟。这两个新的bash进程都在后台并行运行,因此在它们完成sleep命令之前,您将看到它们的输出。

    如果您需要一个进程来运行特定的应用程序,而不是开发,您最好使用
    pipsi
    在一个隔离的虚拟环境中安装程序。
    pipsi
    是一个很好的工具,但我们不能使用其他工具,
    pipsi
    使用
    python2.7
    ,但我想使用'python3'。虽然有解决方法。如果您需要一个用于运行特定应用程序的工具,而不是用于开发,您最好使用
    pipsi
    在隔离的虚拟环境中安装程序。
    pipsi
    是一个很好的工具,但我们不能使用其他工具,而
    pipsi
    使用
    python2.7
    ,但我想用“python3”。虽然有解决办法,但在python程序中,通过控制台入口点,您的意思是确切的,是的。这是一种构建命令行处理器的简单方法。很好的一点是,它提供了一个可以复制到另一个虚拟环境中的人工制品,而不会丢失与它内置的VirtualEnvironment的连接。这是一种构建命令行pr的简单方法