使用与virtualenv不同的Python版本

Ulf*_*Ulf 997 python virtualenv virtualenvwrapper

我有一个当前使用python 2.5.4运行的Debian系统.我得到了virtualenv正确安装,一切正常.我是否有可能使用不同版本的Python的virtualenv?

我编译了Python 2.6.2,并希望将它与一些virtualenv一起使用.是否足以覆盖二进制文件?或者我是否必须更改库中的某些内容?

Dan*_*man 1425

只需在创建virtualenv实例时使用--python(或短-p)选项来指定要使用的Python可执行文件,例如:

virtualenv --python=/usr/bin/python2.6 <path/to/new/virtualenv/>
Run Code Online (Sandbox Code Playgroud)

注意对于Python 3.3或更高版本,请参阅下面的Aelfinn的答案.

  • 我想我会提到这也适用于virtualenvwrappers:mkvirtualenv -p python2.6 env (155认同)
  • 我在这里遗漏了一些东西 - 这不是要求已经在系统上安装了2.6吗?我认为virtualenv的*point*是我可以拥有除主要版本之外的python版本(在我的情况下,在CentOS上为2.4).我假设我可以安装virtualenv,*然后*在它下面安装Python 2.6 for env中的包使用? (56认同)
  • 如果你有点懒惰:`virtualenv -p \`哪个python2.6 \`<path/to/new/virtualenv>` (48认同)
  • @John是的,你是.这不是virtualenv的重点:重点是为Python创建一个沙盒环境.您需要先安装该版本 - 您可以在本地为您的用户安装它. (38认同)
  • @JohnC你可以使用pythonbrew来安装替代蟒蛇. (8认同)
  • pythonbrew 不再维护,请使用 pyenv 代替。 (5认同)
  • 是否没有可以在python版本之间切换而无需创建新虚拟环境的解决方案? (4认同)
  • 决斗安装后使用pip时,是否必须指定使用哪个python pip?(例如 'python2.7 -m pip install SomePackage # 特别是 Python 2.7')或者该 virtualenv 中的 pip 会自动知道要使用哪一个? (2认同)
  • `-p/--python`选项也适用于`virtualenvwrapper`函数,如`mkproject`. (2认同)
  • virtualenv -p $(which python3) &lt;path/to/new/virtualenv/&gt; (2认同)

The*_*inn 233

更新: 对于Python3.6,pyvenv不推荐使用以下脚本.相反, Python Docs建议使用以下命令创建虚拟环境:

python3 -m venv <myenvname>
Run Code Online (Sandbox Code Playgroud)

对于python3(3.3+),请使用上述方法或脚本 pyvenv命令.

pyvenv /path/to/new/virtual/environment
Run Code Online (Sandbox Code Playgroud)

请注意,venv不允许使用其他版本的Python创建virtualenv.为此,请安装并使用该virtualenv 软件包.

  • 很高兴你指出,它需要更多的推广.一个小问题:他们现在主张将其作为`python3 -m venv <envname>`运行,以防止需要存根脚本. (7认同)
  • 实际上,Python 3.6+中的`pyvenv`脚本是[已弃用](https://docs.python.org/dev/whatsnew/3.6.html#deprecated-features),尽管底层的`venv`模块本身不是.所以使用`python 3 -m venv <myenvname>`正如@PaulEveritt所说. (5认同)
  • 请注意,`pyvenv`或`python3 -m venv ...`不要安装`python-config`脚本.这意味着即使在激活Python3环境之后,系统范围的`python-config`也会被调用,并带来令人困惑的后果.请参阅2011年的这个错误报告https://github.com/pypa/virtualenv/issues/169和我的问题/sf/ask/2941465621/? RQ = 1 (4认同)
  • “请注意,‘venv’不允许使用其他版本的 Python 创建 virtualenv。” ——你确定这是真的吗?如果我使用特定的 Python 版本创建它,例如“python3.5 -m venv &lt;myenvname&gt;”(前提是我有该版本的 Python 可用),它似乎对我来说工作得很好。 (2认同)
  • 确认@Nick的观察有效:用特定的Python版本创建`venv`的方法是在设置该版本时使用该版本。例如:`python3.5 -m venv venv` (2认同)
  • 仍然可以通过“venv”使用不同的 python 版本。您不必像“virtualenv”那样提供参数,只需确保使用适当的 python 版本来运行“venv”即可。以 python 启动器“py”为例:“py -3.3 -m venv my_venv”将使用 python 3.3 创建一个虚拟环境。 (2认同)

zza*_*art 177

这些是您在共享托管环境中的步骤,需要从源安装和编译Python,然后从您的Python版本创建venv.对于Python 2.7.9,您可以按照以下方式执行操作:

mkdir ~/src
wget http://www.python.org/ftp/python/2.7.9/Python-2.7.9.tgz
tar -zxvf Python-2.7.9.tgz
cd Python-2.7.9
mkdir ~/.localpython
./configure --prefix=$HOME/.localpython
make
make install
Run Code Online (Sandbox Code Playgroud)

虚拟环境

cd ~/src
wget https://pypi.python.org/packages/5c/79/5dae7494b9f5ed061cff9a8ab8d6e1f02db352f3facf907d9eb614fb80e9/virtualenv-15.0.2.tar.gz#md5=0ed59863994daf1292827ffdbba80a63
tar -zxvf virtualenv-15.0.2.tar.gz
cd virtualenv-15.0.2/
~/.localpython/bin/python setup.py install
virtualenv ve -p $HOME/.localpython/bin/python2.7
source ve/bin/activate   
Run Code Online (Sandbox Code Playgroud)

当然,这适用于您希望复制您工作和部署的确切环境的任何情况.

  • 当然.如果您在虚拟主机环境中并且服务器提供了您不满意的旧版python - 这就是我的情况.此外,如果您碰巧在不同的服务器上开发项目,并且您希望在本地计算机上复制这些环境...... Virtualenv会创建到python库的硬链接.因此,您正在使用安装和创建Virtualenv的python版本非常重要. (15认同)
  • 或者,如果你像我一样,并且在没有sudo特权的情况下工作在锁定的机器上.库,SQL数据库,语言和编译器的本地副本很多!谢谢! (6认同)
  • 在virtualenv 1.9.1下,我不得不使用`〜/ .localpython/bin/virtualenv`代替`virtualenv`来完成设置而不会出错.另外,使用`source ve/bin/activate`而不是`source activate`. (4认同)
  • 这样做的另一个原因是在它们进入main之前试用beta版以确保你的项目及其依赖项仍然有效,而不会有破坏你的软件包管理的风险,并且在整个地方留下悬空文件.我喜欢这个答案. (3认同)
  • 你能详细说明为什么这样做:为什么在本地安装python?更重要的是**为什么要使用你要使用的python版本安装virtualenv**? (2认同)

iEl*_*ric 98

virtualenv --python=/usr/bin/python2.6 <path/to/myvirtualenv>
Run Code Online (Sandbox Code Playgroud)

  • 是否没有可以在python版本之间切换而无需创建新虚拟环境的解决方案? (5认同)
  • 请参阅下面的答案,了解使用环境变量的等效解决方案 这种方法意味着您不必记住使用`-p`. (2认同)
  • 如果您要安装系统上未安装的python版本,此方法行得通吗?假设您要测试“ python3.6”,但不想触摸计算机上安装的“ python3.5”? (2认同)
  • @alpha_989 你找到解决方案了吗? (2认同)

Dan*_*Lee 88

有一种更简单的方法,

virtualenv venv --python=python2.7
Run Code Online (Sandbox Code Playgroud)

感谢评论,这只有在系统级安装了python2.7时才有效(例如/usr/bin/python2.7).

否则,如果您使用自制程序,则可以使用该路径为您提供所需内容.

virtualenv venv --python=/usr/local/bin/python
Run Code Online (Sandbox Code Playgroud)

你可以找到python安装的路径

which python
Run Code Online (Sandbox Code Playgroud)

这也适用于python 3.

which python3
>> /usr/local/bin/python3
virtualenv venv --python=/usr/local/bin/python3
Run Code Online (Sandbox Code Playgroud)

最终冷凝到:

virtualenv venv -p `which python`
virtualenv venv -p `which python3`
Run Code Online (Sandbox Code Playgroud)

  • 仅供参考,仅当您在系统级别安装了 python2.7 时才有效(例如 /usr/bin/python2.7) (4认同)

bal*_*azs 68

在我的Windows下,这适用于:

virtualenv --python=c:\Python25\python.exe envname
Run Code Online (Sandbox Code Playgroud)

没有python.exe我得到WindowsError: [Error 5] Access is denied 我使用virtualenv 1.6.1安装Python2.7.1,我想要python 2.5.2.


7st*_*tud 30

Mac OSX 10.6.8(Snow Leopard):

1)执行此操作时pip install virtualenv,pip命令与您的某个python版本相关联,并virtualenv安装到该版本的python中.你可以做

 $ which pip   
Run Code Online (Sandbox Code Playgroud)

看看是什么版本的python.如果你看到类似的东西:

 $ which pip
 /usr/local/bin/pip
Run Code Online (Sandbox Code Playgroud)

然后做:

$ ls -al /usr/local/bin/pip
lrwxrwxr-x  1 root  admin  65 Apr 10  2015 /usr/local/bin/pip ->
../../../Library/Frameworks/Python.framework/Versions/2.7/bin/pip
Run Code Online (Sandbox Code Playgroud)

你可以在输出中看到python版本.

默认情况下,这将是用于您创建的任何新环境的python版本.但是,您可以指定计算机上安装的任何版本的python,以便在新环境中使用-p flag:

$ virtualenv -p python3.2 my_env  
Running virtualenv with interpreter /usr/local/bin/python3.2  
New python executable in my_env/bin/python  
Installing setuptools, pip...done.  
Run Code Online (Sandbox Code Playgroud)

virtualenv my_env 将在当前目录中创建一个包含Python可执行文件的文件夹,以及可用于安装其他包的pip [command]的副本.

http://docs.python-guide.org/en/latest/dev/virtualenvs/

virtualenv 只需将python从计算机上的某个位置复制到新创建的my_env/bin /目录中.

2)系统python是/usr/bin,而我安装的各种python版本默认安装到:

 /usr/local/bin
Run Code Online (Sandbox Code Playgroud)

3)我安装的各种蟒蛇的名字都是python2.7或者python3.2,我可以使用这些名称而不是完整的路径.

======== VIRTUALENVWRAPPER =========

1)我在使用virtualenvwrapper工作时遇到了一些问题.这就是我最终投入的内容~/.bash_profile:

export WORKON_HOME=$HOME/.virtualenvs
export PROJECT_HOME=$HOME/django_projects  #Not very important -- mkproject command uses this
#Added the following based on: 
#http://stackoverflow.com/questions/19665327/virtualenvwrapper-installation-snow-leopard-python
export VIRTUALENVWRAPPER_PYTHON=/usr/local/bin/python2.7 
#source /usr/local/bin/virtualenvwrapper.sh
source /Library/Frameworks/Python.framework/Versions/2.7/bin/virtualenvwrapper.sh
Run Code Online (Sandbox Code Playgroud)

2)-p option与virtualenvwrapper 的工作方式不同:我必须指定要在新环境中使用的python解释器的完整路径(当我不想使用默认的python版本时):

$ mkvirtualenv -p /usr/local/bin/python3.2 my_env
Running virtualenv with interpreter /usr/local/bin/python3
New python executable in my_env/bin/python
Installing setuptools, pip...done.
Usage: source deactivate

removes the 'bin' directory of the environment activated with 'source
activate' from PATH. 
Run Code Online (Sandbox Code Playgroud)

与virtualenv不同,virtualenvwrapper将在$ WORKON_HOME环境变量指定的位置创建环境.这可以将您的所有环境保存在一个地方.


Vic*_*art 22

[2019 年 11 月] 我需要在基于 Python 3.8 的 Arch Linux 系统上安装 Python 3.7 环境 (env)。Python 3.7 不再在系统上,所以我无法降级 Python 来安装我需要的包。

此外,我想在虚拟环境 (venv) 中使用该包/Python 3.7。我就是这样做的。


下载 Python 版本源文件:

我下载了 Python 3.7.4 源文件

https://www.python.org/downloads/source/

/mnt/Vancouver/apps/python_versions/src/Python-3.7.4.tgz

然后我将该存档(源文件)解压缩到

/mnt/Vancouver/apps/python_versions/src/Python-3.7.4/


安装:

[注意:在我的系统环境中,而不是 venv。]

cd /mnt/Vancouver/apps/python_versions/src/Python-3.7.4/
time ./configure                 ## 17 sec
time make                        ## 1 min 51 sec
time sudo make install           ## 18 sec
time make clean                  ## 0.3 sec
Run Code Online (Sandbox Code Playgroud)

检查已安装的 Python 版本:

$ which python
/usr/bin/python

$ python --version
Python 3.8.0

$ which python3.7
/usr/local/bin/python3.7

$ python    ## Python 3.8 [system / env]
Python 3.8.0 (default, Oct 23 2019, 18:51:26) 
[GCC 9.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>

$ python3.7    ## newly-installed Python 3.7 package
Python 3.7.4 (default, Nov 20 2019, 11:36:53) 
[GCC 9.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> print(sys.version)
3.7.4 (default, Nov 20 2019, 11:36:53) 
[GCC 9.2.0]
>>>

$ python3.7 --version                                                                                                 
Python 3.7.4
Run Code Online (Sandbox Code Playgroud)

如何为特定的 Python 版本创建 venv:

https://docs.python.org/3/tutorial/venv.html

12.2. 创建虚拟环境

用于创建和管理虚拟环境的模块称为venv. venv通常会安装您可用的最新版本的 Python。如果您的系统上有多个 Python 版本,您可以通过运行 python3 或您想要的任何版本来选择特定的 Python 版本。

要创建虚拟环境,请确定要放置它的目录,然后将 venv 模块作为具有目录路径的脚本运行:

python3 -m venv tutorial-env

tutorial-env如果目录不存在,这将创建目录,并在其中创建包含 Python 解释器、标准库和各种支持文件的副本的目录。...


创建 Python 3.7 venv [在 Python 3.8 操作环境/系统上]:

python3.7 -m venv ~/venv/py3.7      ## create Python 3.7-based venv
source ~/venv/py3.7/bin/activate    ## activate that venv
deactivate                          ## deactivate that venv (when done, there)
Run Code Online (Sandbox Code Playgroud)

添加到~/.bashrc

alias p37='echo "   [Python 3.7 venv (source ~/venv/py3.7/bin/activate)]" && source ~/venv/py3.7/bin/activate'
Run Code Online (Sandbox Code Playgroud)

测试 Python 3.7 venv:

$ p37                                                                                                                 
[Python 3.7 venv (source ~/venv/py3.7/bin/activate)]

(py3.7)$ python --version
Python 3.7.4

(py3.7)$ python
Python 3.7.4 (default, Nov 20 2019, 11:36:53) 
[GCC 9.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> print(sys.version)
3.7.4 (default, Nov 20 2019, 11:36:53) 
[GCC 9.2.0] 
>>>
Run Code Online (Sandbox Code Playgroud)


kma*_*o23 21

假设您目前在virtualenv中安装了python 2.7.但是想要使用python3.2,你必须用以下内容更新:

$ virtualenv --python=/usr/bin/python3.2 name_of_your_virtualenv
Run Code Online (Sandbox Code Playgroud)

然后通过以下方式激活你的virtualenv:

$ source activate name_of_your_virtualenv
Run Code Online (Sandbox Code Playgroud)

然后执行:python --version在shell中检查您的版本是否现在已更新.


Sac*_*ige 20

对于新手来说,这两个命令应该可以正常工作

virtualenv -p python2 myenv (对于python2)

virtualenv -p python3 myenv (对于python3)


Nim*_*ush 12

你可以调用virtualenv你想要的python版本.例如:

python3 -m virtualenv venv
Run Code Online (Sandbox Code Playgroud)

或者直接指向你的virtualenv路径.例如对于Windows:

c:\Python34\Scripts\virtualenv.exe venv
Run Code Online (Sandbox Code Playgroud)

通过运行:

venv/bin/python

Python 3.5.1 (v3.5.1:37a07cee5969, Dec  5 2015, 21:12:44) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>
Run Code Online (Sandbox Code Playgroud)

你可以看到在虚拟环境中安装的python版本

  • @tanvi:你需要首先在你的python3中安装virtualenv.首先运行`pip3 install virtualenv` (2认同)

Chr*_*son 10

-p方法效果很好,但您必须记住每次都使用它.如果您的目标是通常切换到较新版本的Python,那将是一种痛苦,也可能导致错误.

您的另一个选择是设置一个与之相同的环境变量-p.通过您的~/.bashrc文件或管理登录会话的环境变量的任何位置设置此项:

export VIRTUALENV_PYTHON=/path/to/desired/version
Run Code Online (Sandbox Code Playgroud)

然后在virtualenv您未-p在命令行上指定的任何时候使用它.


jnn*_*nnn 8

在窗户上:

py -3.4x32 -m venv venv34
Run Code Online (Sandbox Code Playgroud)

或者

py -2.6.2 -m venv venv26
Run Code Online (Sandbox Code Playgroud)

这使用py启动器,它将为您找到正确的 python 可执行文件(假设您已经安装了它)。


Zih*_*hao 8

对于Mac(High Sierra),在python3中安装virtualenv并为python2创建virtualenv:

 $ python3 -m pip install virtualenv
 $ python3 -m virtualenv --python=python2 vp27
 $ source vp27/bin/activate
 (vp27)$ python --version
 Python 2.7.14
Run Code Online (Sandbox Code Playgroud)


Pet*_*rMI 8

正如多个答案中已经提到的,使用virtualenv是一个干净的解决方案。然而,每个人都应该注意的一个小陷阱是,如果在bash_aliases中设置了 python 的别名,如下所示:

python=python3.6
Run Code Online (Sandbox Code Playgroud)

该别名也将在虚拟环境中使用。因此,在这种情况下,无论使用什么解释器来创建环境,python -V在虚拟环境中运行都会始终输出:3.6

virtualenv venv --python=pythonX.X
Run Code Online (Sandbox Code Playgroud)


Ger*_*ard 7

通过使用命令替换为您找到python2更简单:

virtualenv -p $(which python2) <path/to/new/virtualenv/>

或者在使用virtualenvwrapper时:

mkvirtualenv -p $(which python2) <env_name>


Col*_*ith 7

对于 Windows 来说,这些似乎有点过于复杂。如果您在运行 python 3.3 或更高版本的 Windows 上,则可以使用 python 启动器py更轻松地完成此操作。只需安装不同的 python 版本,然后运行:

py -[my version] -m venv env
Run Code Online (Sandbox Code Playgroud)

这将使用 python 创建一个env在当前目录中调用的虚拟环境[my version]。举个例子:

py -3.7 -m venv env
./env/Scripts/activate
Run Code Online (Sandbox Code Playgroud)

这将创建一个名为envusing python3.7 的虚拟环境并激活它。不需要路径或其他复杂的东西。


mat*_*th5 7

我在 Windows 上使用了这个答案

/sf/answers/1595558121/

py -3.4 -m venv c:\path\to\wherever\you\want\it
Run Code Online (Sandbox Code Playgroud)


sil*_*ger 6

在Mac上我使用pyenv和virtualenvwrapper.我不得不创造一个新的virtualenv.你需要自制软件我假设你已经安装了,如果你在Mac上,但只是为了好玩:

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"


brew install pyenv
pyenv install 2.7.10
pyenv global 2.7.10
export PATH=/Users/{USERNAME}/.pyenv/versions/2.7.10/bin:$PATH
mkvirtualenv -p ~/.pyenv/versions/2.7.10/bin/python  {virtual_env_name}
Run Code Online (Sandbox Code Playgroud)

我也冻结了我的要求,所以我可以简单地重新安装在新的virtualenv中:

pip install -r requirements.txt
Run Code Online (Sandbox Code Playgroud)


Alk*_*ian 6

您应该安装了该 Python 版本。如果你拥有它,那么基本上,

使用 virtualenv,

virtualenv --python=python3.8 env/place/you/want/to/save/to
Run Code Online (Sandbox Code Playgroud)

与 venv

python3.8 -m venv env/place/you/want/to/save/to
Run Code Online (Sandbox Code Playgroud)

上面的例子是针对python3.8的,你可以将其更改为具有不同版本的虚拟环境,因为它们已安装在您的计算机中。


bra*_*nks 5

我使用pyenv来管理我的 python 版本。

pyenv install 3.7.3
pyenv local 3.7.3
Run Code Online (Sandbox Code Playgroud)

检查你的Python版本:

$ python --version
Python 3.7.3
Run Code Online (Sandbox Code Playgroud)

使用venv创建虚拟环境:

$ python --version
Python 3.7.3
Run Code Online (Sandbox Code Playgroud)

然后激活虚拟环境:

python -m venv .
Run Code Online (Sandbox Code Playgroud)

检查你的Python版本:

source bin/activate
Run Code Online (Sandbox Code Playgroud)

您可能需要删除之前的虚拟环境

rm -rf bin
Run Code Online (Sandbox Code Playgroud)


Lei*_*son 5

在 Linux Ubuntu 21.04(当前是 Python 3.9.5)上,我需要获得 Python 3.7.8 的 virtualenv。开始工作的完整步骤:

找到你想要的Python版本源,例如3.7.8在这里:https ://www.python.org/downloads/release/python-378/

下载 Gzip 压缩的源 tarball

解压tar zxvf Python-3.7.8.tgz(如果与3.7.8不同,请根据需要修改您的版本号)

将解压后的文件夹复制到 /usr/bin :sudo cp -r Python-3.7.8 /usr/bin

cd /usr/bin/Python-3.7.8/
Run Code Online (Sandbox Code Playgroud)

如果您想查看目前为止拥有的内容,请检查内容: ls

sudo time ./configure
sudo time make
time sudo make install
time make clean
Run Code Online (Sandbox Code Playgroud)

检查你的 python 是如何设置和报告的:

which python
python --version
Run Code Online (Sandbox Code Playgroud)

应该全部与您的主要安装相关(对我来说是Python 3.9.5)

要检查您的新安装:

which python 3.7
python3.7 --version
Run Code Online (Sandbox Code Playgroud)

应该与您的 3.7.8 安装有关

如果您想运行它来检查,请执行以下操作:

python3.7
exit()
Run Code Online (Sandbox Code Playgroud)

安装 venv:

sudo apt install venv
Run Code Online (Sandbox Code Playgroud)

要创建 venv(可能在您的存储库中,如果是这样,请将 .venv 添加到 .gitignore):

python3.7 -m venv .venv
Run Code Online (Sandbox Code Playgroud)

要激活您的 venv:

source .venv/bin/activate
Run Code Online (Sandbox Code Playgroud)

检查您的版本:

python --version
Run Code Online (Sandbox Code Playgroud)