能否在Virtualenv中安装另一个版本的Python?

157

我在一个拥有安装Python 2.4的web-hosting上有一个共享账户,但我的代码与2.4不兼容。是否可以直接在Virtualenv中安装Python 2.6呢?

注意:我没有权限在共享服务器上安装它。

13个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
263

以下是virtualenv的选项:

$ virtualenv
You must provide a DEST_DIR
Usage: virtualenv [OPTIONS] DEST_DIR

Options:
  --version             show program's version number and exit.
  -h, --help            show this help message and exit.
  -v, --verbose         Increase verbosity.
  -q, --quiet           Decrease verbosity.
  -p PYTHON_EXE, --python=PYTHON_EXE
                        The Python interpreter to use, e.g.,
                        --python=python2.5 will use the python2.5 interpreter
                        to create the new environment.  The default is the
                        interpreter that virtualenv was installed with
                        (/usr/bin/python)
  --clear               Clear out the non-root install and start from scratch
  --no-site-packages    Don't give access to the global site-packages dir to
                        the virtual environment
  --unzip-setuptools    Unzip Setuptools or Distribute when installing it
  --relocatable         Make an EXISTING virtualenv environment relocatable.
                        This fixes up scripts and makes all .pth files
                        relative
  --distribute          Use Distribute instead of Setuptools. Set environ
                        variable VIRTUALENV_USE_DISTRIBUTE to make it the
                        default
  --prompt==PROMPT      Provides an alternative prompt prefix for this
                        environment

1) 您想要做的是将Python安装到您可以写入的目录中。

您可以按照此处的说明进行操作。

对于Python 2.7.1:
Python源代码

mkdir ~/src
mkdir ~/.localpython
cd ~/src
wget http://www.python.org/ftp/python/2.7.1/Python-2.7.1.tgz
tar -zxvf Python-2.7.1.tgz
cd Python-2.7.1

make clean
./configure --prefix=/home/${USER}/.localpython
make
make install

2) 安装 virtualenv
virtualenv 源码

cd ~/src
wget http://pypi.python.org/packages/source/v/virtualenv/virtualenv-1.5.2.tar.gz#md5=fbcefbd8520bb64bc24a560c6019a73c
tar -zxvf virtualenv-1.5.2.tar.gz
cd virtualenv-1.5.2/
~/.localpython/bin/python setup.py install

3) 使用本地Python创建虚拟环境
virtualenv文档

mkdir /home/${USER}/virtualenvs
cd /home/${USER}/virtualenvs
~/.localpython/bin/virtualenv py2.7 --python=/home/${USER}/.localpython/bin/python2.7

4) 激活环境

cd ~/virtualenvs/py2.7/bin
source ./activate

5) 检查

(py2.7)$ python
Python 2.7.1 (r271:86832, Mar 31 2011, 15:31:37) 
[GCC 4.4.5] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> exit()

(py2.7)$ deactivate
$ python
Python 2.6.6 (r266:84292, Sep 15 2010, 15:52:39) 
[GCC 4.4.5] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 

15
很棒的文章!但有两条评论:1.在执行./configure --prefix=/home/<user>/.localpython之前,我不需要执行make clean,实际上make clean返回了错误。2. virtualenv name -p=/python/path没有起作用,而是virtualenv name -p /python/path生效了。我猜这是由于virtualenv版本造成的。谢谢! - zzart
1
我被gcc jailshell'd了,但在第一步中仍能使用ActiveState Python代替:http://docs.activestate.com/activepython/2.7/installnotes.html#aspackage_interactive - Scott Stafford
3
以下是您需要安装的模块列表(在 Debian 上),以便使其尽可能接近完整安装:curl gcc build-essential libncursesw5-dev libreadline5-dev libssl-dev libgdm-dev libbz2-dev libc6-dev libsqlite3-dev tk-dev - Claudiu
1
吹毛求疵:source 是 Bash 的专有名词。POSIX 的等效命令是 . - l0b0
4
我发现做这件事情时缺少很多基础模块。 - user299709
显示剩余7条评论

20

先决条件:

  1. sudo easy_install virtualenv
  2. sudo pip install virtualenvwrapper

使用Python2.6安装virtualenv:

  1. 您可以手动下载,构建并安装另一个版本的Python到/usr/local或其他位置。

  2. 如果是除/usr/local之外的其他位置,请将其添加到PATH。

  3. 重新加载您的shell以获取更新的PATH。

  4. 从此时起,您应该能够从您的shell调用以下2个Python二进制文件python2.5python2.6

  5. 使用python2.6创建一个新的virtualenv实例:

    mkvirtualenv --python=python2.6 yournewenv


5
我认为,只有在安装了virtualenvwrapper时,mkvirtualenv命令才能正常使用。 - dting

5

通过pyenv完整指南

如果未安装pyenv,则使用pyenv-installer进行安装:

$ curl https://pyenv.run | bash

要使用任何自定义的Python版本,例如3.5.6,请使用以下方法:

pyenv install 3.5.6
pyenv virtualenv 3.5.6 NAME_OF_YOUR_ENV
cd YOUR_PROJECT_PATH
pyenv local NAME_OF_YOUR_ENV

4
现在,我发现安装Python的最简单方法是通过conda安装到conda环境中。
安装conda(您可能需要虚拟环境)。
pip install conda

在Conda环境中安装新的Python版本

我在这里添加答案是因为不需要手动下载。 conda会为您完成。

现在,为您想要的Python版本创建一个环境。在本例中,我将使用3.5.2,因为它是撰写本文时(2016年8月)的最新版本。

conda create -n py35 python=3.5.2

将创建一个环境,以便conda安装软件包


要激活此环境(假设您使用的是Linux,请参阅conda文档):

source activate py35

现在,在环境中通过pip或者conda安装您需要的内容(conda具有更好的二进制包支持)。

conda install <package_name>

3

我正在使用virtualenvwrapper,不想修改$PATH,以下是方法:

$ which python3
/usr/local/bin/python3

$ mkvirtualenv --python=/usr/local/bin/python3 env_name

3
该过程安装Python2.7到任何地方,并消除env文件夹中的任何绝对路径引用(由virtualenv管理)。即使没有安装virtualenv,也可以实现此操作。 因此,从理论上讲,您可以将顶级目录放入tar包中,分发并在未安装Python(或任何依赖项)的机器上运行tar包内配置的任何内容。 如有任何问题,请与我联系。这只是我正在进行的一个大型项目的一部分。现在,为了能够更好地完成该项目...
  1. Set up environment folders.

    $ mkdir env
    $ mkdir pyenv
    $ mkdir dep
    
  2. Get Python-2.7.3, and virtualenv without any form of root OS installation.

    $ cd dep
    $ wget http://www.python.org/ftp/python/2.7.3/Python-2.7.3.tgz
    $ wget https://raw.github.com/pypa/virtualenv/master/virtualenv.py
    
  3. Extract and install Python-2.7.3 into the pyenv dir. make clean is optional if you are doing this a 2nd, 3rd, Nth time...

    $ tar -xzvf Python-2.7.3.tgz
    $ cd Python-2.7.3
    $ make clean
    $ ./configure --prefix=/path/to/pyenv
    $ make && make install
    $ cd ../../
    $ ls
    dep    env    pyenv
    
  4. Create your virtualenv

    $ dep/virtualenv.py --python=/path/to/pyenv/bin/python --verbose env
    
  5. Fix the symlink to python2.7 within env/include/

    $ ls -l env/include/
    $ cd !$
    $ rm python2.7
    $ ln -s ../../pyenv/include/python2.7 python2.7
    $ cd ../../
    
  6. Fix the remaining python symlinks in env. You'll have to delete the symbolically linked directories and recreate them, as above. Also, here's the syntax to force in-place symbolic link creation.

    $ ls -l env/lib/python2.7/
    $ cd !$
    $ ln -sf ../../../pyenv/lib/python2.7/UserDict.py UserDict.py
    [...repeat until all symbolic links are relative...]
    $ cd ../../../
    
  7. Test

    $ python --version
    Python 2.7.1
    $ source env/bin/activate
    (env)
    $ python --version
    Python 2.7.3
    
你好。

1
第四步好像需要pip模块。我尝试使用最新的Python 2.7.9安装。 - Roman Susi
1
尝试阅读这篇文章,但是答案非常不完整且有很多错误。 - Alex R

3
通常的方法是下载源代码并本地构建和安装(但不能直接在虚拟环境中),然后使用该本地Python安装创建一个新的虚拟环境。在某些系统上,可以下载并安装预编译的Python而不是从源代码构建。

2
您可以使用pyenv。 有许多不同的版本,如anaconda、jython、pypy等。

https://github.com/yyuu/pyenv

安装就像这样简单:pyenv install 3.2.6
pyenv install --list
Available versions:
  2.1.3
  2.2.3
  2.3.7
  2.4
  2.4.1
  2.4.2
  2.4.3
  2.4.4
  2.4.5
  2.4.6
  2.5
  2.5.1
  2.5.2
  2.5.3
  2.5.4
  2.5.5
  2.5.6
  2.6.6

...


1

虽然问题明确描述了安装2.6版本,但我想在上面优秀答案的基础上添加一些重要点,以防某些人遇到类似情况。值得一提的是,我的情况是在尝试在Ubuntu 10.04上安装2.7版本。

首先,我采用所有答案中所述方法的原因是从deadsnake's ppa's安装Python完全失败了, 因此本地安装Python是正确的方式。

我曾试过使用默认安装的pip(sudo apt-get install pip),但这是错误的。事实证明,我遇到了所有种类的问题,最终无法创建虚拟环境。

因此,我强烈建议使用 在本地安装pip,使用wget https://raw.github.com/pypa/pip/master/contrib/get-pip.py && python get-pip.py --user这个相关问题给了我这个提示。 现在如果这不起作用,请确保已安装Ubuntu的libssl-dev或CentOS的openssl-dev。使用apt-getyum安装它们,然后重新构建Python(如果已经安装,则无需删除任何内容,只需在其上进行)。如果get-pip抱怨,请通过在py shell上运行import ssl来检查。 最后,别忘了声明 .local/bin 和本地 Python 的路径,使用 which pipwhich python 进行检查。

0

我没有找到合适的答案,所以我来分享我的看法。这个方法基于@toszter的回答,但不使用系统Python(你可能知道,在处理多个Python配置时,在系统级别安装setuptools和virtualenv并不总是一个好主意):

#!/bin/sh

mkdir python_ve
cd python_ve

MYROOT=`pwd`
mkdir env pyenv dep

cd ${MYROOT}/dep
wget https://pypi.python.org/packages/source/s/setuptools/setuptools-15.2.tar.gz#md5=a9028a9794fc7ae02320d32e2d7e12ee
wget https://raw.github.com/pypa/virtualenv/master/virtualenv.py
wget https://www.python.org/ftp/python/2.7.9/Python-2.7.9.tar.xz
xz -d Python-2.7.9.tar.xz

cd ${MYROOT}/pyenv
tar xf ../dep/Python-2.7.9.tar
cd Python-2.7.9
./configure --prefix=${MYROOT}/pyenv && make -j 4 && make install

cd ${MYROOT}/pyenv

tar xzf ../dep/setuptools-15.2.tar.gz

cd ${MYROOT}

pyenv/bin/python dep/virtualenv.py --no-setuptools --python=${MYROOT}/pyenv/bin/python --verbose env
env/bin/python pyenv/setuptools-15.2/setup.py install
env/bin/easy_install pip

echo "virtualenv in ${MYROOT}/env"
在这里打破鸡蛋问题的诀窍是先制作没有setuptools的virtualenv,因为否则会失败(找不到pip)。可能可以直接安装pip / wheel,但某种程度上easy_install是我想到的第一件事。此外,通过分解具体版本,可以改进脚本。 注意:脚本中使用了xz。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,