有可能在 Virtualenv 上安装另一个版本的 Python 吗?

我在一个安装了 Python 2.4的主机上有一个共享帐户,但是我的代码与2.4不兼容。有没有可能将 Python 2.6直接安装到 Virtualenv?

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

136730 次浏览

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

先决条件:

  1. sudo easy_install virtualenv
  2. sudo pip install virtualenvwrapper

使用 Python 2.6安装 viralenv:

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

  2. 如果它是另一个位置以外的 /usr/local,添加到您的 PATH。

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

  4. 从这一点开始,您应该能够从您的 shell python2.5python2.6调用以下2个 python 二进制文件

  5. python2.6创建一个 viralenv 的新实例:

    mkvirtualenv --python=python2.6 yournewenv

不能,但是您可以在 $HOME目录下安装独立的 Python 构建(例如 ActivePython)。

这种方法是最快的 ,并且不需要您自己编译 Python。

(作为奖励,您还可以使用 ActiveState 的 二进制包管理器二进制包管理器)

下面是 viralenv 的选项

$ 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 安装到你也能写的目录中。

你可以按照说明 here

对于 Python 2.7.1
Python source

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)安装 viralenv
virtualenv source

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 创建一个 viralenv
virtualenv docs

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.
>>>

此过程将 Python 2.7 并消除任何绝对路径引用安装在 env文件夹 (由 viralenv 管理)中。

因此,从理论上讲,您可以将顶级目录放入 tarball 中,分发并运行在 tarball 中配置的任何内容,这些内容可以在没有安装 Python (或任何依赖项)的机器上运行。

有任何问题联系我。这只是一个正在进行的,更大的项目的一部分,我的工程。现在,为了交易..。

  1. 设置环境文件夹。

    $ 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
    

Aloha.

虽然这个问题特别描述了安装2.6,但是我想在上面的出色答案中加入一些重点,以防有人碰到这个问题。郑重声明,我的情况是我试图在 ubuntu 10.04机器上安装2.7。

首先,我对这里所有答案中描述的方法的动机是,从 死蛇的爸爸安装 Python 是一个彻底的失败。因此,建立一个本地的蟒蛇是正确的选择。

尝试过这样做之后,我认为依靠 pip 的默认安装(使用 sudo apt-get install pip)就足够了。不幸的是,这是错误的。结果是,我得到了所有讨厌的短期问题,最终无法创建一个虚拟。

因此,我强烈推荐 < a href = “ https://askubuntu.com/questions/363300/how-to-install-pip-python-to-user-without-root-access”> install pip local 本地安装 pipwget 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 声明为 path,检查 which pipwhich python

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

$ which python3
/usr/local/bin/python3


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

我还没有找到合适的答案,所以这里是我的看法,它建立在@toszter 的答案之上,但是 不使用系统 Python(你可能知道,在处理许多 Python 配置时,在系统级别安装 setuptools 和 viralenv 并不总是一个好主意) :

#!/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 的情况下创建 viralenv,因为否则它会失败(找不到 pip)。也许可以直接安装 pip/round,但是我想到的第一件事就是简单的 _ install。此外,还可以通过分解具体版本来改进脚本。

注意: 在脚本中使用 xz。

现在,我发现要获得更新版本的 Python,最简单的方法是通过 conda 将其安装到 conda 环境中。


安装 conda (您可能需要一个 Virtual alenv)

pip install conda

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

我在这里添加这个答案是因为不需要手动下载。

现在为所需的 Python 版本创建一个环境。在这个例子中,我将使用 3.5.2,因为它是写作时的最新版本(2016年8月)。

conda create -n py35 python=3.5.2

将为 conda 创建一个安装包的环境


要激活这个环境(我假设 Linux 不激活 Conda Docs) :

source activate py35

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

conda install <package_name>

你可以使用 pyenv。

有很多不同的版本,水蟒,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

...

首先,谢谢你的回答,非常完美。

对于那些在共享主机中无法访问 GCC 的用户,可以使用 ActivePython 代替 Scott Stafford 提到的普通 Python。下面是相应的命令。

wget http://downloads.activestate.com/ActivePython/releases/2.7.13.2713/ActivePython-2.7.13.2713-linux-x86_64-glibc-2.3.6-401785.tar.gz


tar -zxvf ActivePython-2.7.13.2713-linux-x86_64-glibc-2.3.6-401785.tar.gz


cd ActivePython-2.7.13.2713-linux-x86_64-glibc-2.3.6-401785


./install.sh

它将询问您到 python 目录的路径

../../.localpython

只需将上面代替为 DTing 答案中的步骤1,然后继续执行步骤2。请注意,ActivePython 包 URL 可能会随着新版本的发布而改变。你总是可以从这里得到新的网址: http://www.activestate.com/activepython/downloads

根据 URL,您需要根据接收到的文件更改 tar 和 cd 命令的名称。

全指南与 Penenv

如果没有安装 pyenv,那么使用 安装程式安装它:

$ 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