247

简短的问题

背景

SO question 4314376的回答中,我建议使用ez_setup这样您就可以安装pipvirtualenv如下所示:

curl -O http://peak.telecommunity.com/dist/ez_setup.py
sudo python ez_setup.py
sudo easy_install pip
sudo pip install virtualenv

我最初从 Jesse Noller 的博客文章中提取了这些说明所以你想在 Mac 上使用 Python?. 我喜欢保持一个干净的全局站点包目录的想法,所以我安装的唯一其他包是 virtualenvwrapperdistribute. (因为这个 Python 公共服务公告,我最近添加distribute到我的工具箱中。为了安装这两个包,我使用了:

sudo pip install virtualenvwrapper
curl -O http://python-distribute.org/distribute_setup.py
sudo python distribute_setup.py

没有更多的 setuptools 和 easy_install

为了真正遵循Python 公共服务公告,在全新的 Python 安装中,我将执行以下操作:

curl -O http://python-distribute.org/distribute_setup.py
sudo python distribute_setup.py
sudo easy_install pip
sudo pip install virtualenv
sudo pip install virtualenvwrapper

雕文的斥责

在对SO 问题 4314376的回答的评论中,SO 用户Glyph表示:

不。永远不要做sudo python setup.py install任何事情。编写一个 ~/.pydistutils.cfg 将您的 pip 安装放入 ~/.local 或其他地方。尤其是命名的文件ez_setup.py往往会吸收较新版本的东西,例如 setuptools 和 easy_install,这可能会破坏您操作系统上的其他东西。

回到简短的问题

所以Glyph 的回答让我想到了我原来的问题:

4

15 回答 15

173

你可以做到这一点,而无需在 python 本身中安装任何东西。

您不需要 sudo 或任何特权。

您无需编辑任何文件。

将 virtualenv 安装到引导虚拟环境中。使用该虚拟环境来创建更多。由于 virtualenv 附带 pip 和分发,您可以从一次安装中获得所有内容。

  1. 下载虚拟环境:
  2. 解压源压缩包
  3. 使用解压后的 tarball 创建一个干净的虚拟环境。这个虚拟环境将用于“引导”其他人。您的所有虚拟环境都将自动包含 pip 和分发。
  4. 使用 pip,将 virtualenv 安装到该引导环境中。
  5. 使用该引导环境来创建更多!

这是 bash 中的一个示例:

# Select current version of virtualenv:
VERSION=12.0.7
# Name your first "bootstrap" environment:
INITIAL_ENV=bootstrap
# Set to whatever python interpreter you want for your first environment:
PYTHON=$(which python)
URL_BASE=https://pypi.python.org/packages/source/v/virtualenv

# --- Real work starts here ---
curl -O $URL_BASE/virtualenv-$VERSION.tar.gz
tar xzf virtualenv-$VERSION.tar.gz
# Create the first "bootstrap" environment.
$PYTHON virtualenv-$VERSION/virtualenv.py $INITIAL_ENV
# Don't need this anymore.
rm -rf virtualenv-$VERSION
# Install virtualenv into the environment.
$INITIAL_ENV/bin/pip install virtualenv-$VERSION.tar.gz

现在您可以使用“引导”环境来创建更多:

# Create a second environment from the first:
$INITIAL_ENV/bin/virtualenv py-env1
# Create more:
$INITIAL_ENV/bin/virtualenv py-env2

发疯!

笔记

这假设您没有使用真正旧版本的 virtualenv。旧版本需要标志--no-site-packges(并且取决于 Python 的版本--distribute)。python virtualenv.py path-to-bootstrap现在您可以使用或创建您的引导环境python3 virtualenv.py path-to-bootstrap

于 2011-03-03T05:30:49.120 回答
20

我认为 Glyph 意味着做这样的事情:

  1. 创建一个目录~/.local,如果它不存在。
  2. 在您的~/.bashrc中,确保~/.local/bin打开PATH并且~/.local打开PYTHONPATH
  3. 创建一个文件~/.pydistutils.cfg,其中包含

    [install]
    prefix=~/.local
    

    这是一个标准的 ConfigParser 格式文件。

  4. 下载 distribute_setup.py并运行python distribute_setup.py(否sudo)。如果它抱怨一个不存在的site-packages目录,请手动创建它:

    mkdir -p ~/.local/lib/python2.7/site-packages/

  5. 运行which easy_install以验证它来自~/.local/bin

  6. pip install virtualenv
  7. pip install virtualenvwrapper
  8. 创建一个包含文件夹的虚拟环境,比如说~/.virtualenvs
  9. ~/.bashrc添加

    export WORKON_HOME
    source ~/.local/bin/virtualenvwrapper.sh
    

就是这样,完全没用,sudo而且你的 Python 环境在~/.local,完全独立于操作系统的 Python。免责声明:不确定virtualenvwrapper在这种情况下的兼容性如何 - 我无法在我的系统上测试它:-)

于 2010-12-01T13:55:07.840 回答
16

如果您按照我在此答案中链接的几个教程中建议的步骤进行操作,则无需在 Walker 和 Vinay 的答案中使用有些复杂的“手动”步骤即可获得所需的效果。如果你在 Ubuntu 上:

sudo apt-get install python-pip python-dev

在 OS X 中通过使用 homebrew 安装 python 来实现等效(更多细节在这里)。

brew install python

安装后,您可以使用pip它来获取剩余的软件包(您可以sudo在 OS X 中省略,因为您使用的是本地 python 安装)。

sudo pip install virtualenvwrapper

(这些是您需要全局安装的唯一软件包,我怀疑它会与操作系统中的任何系统级别发生冲突。如果您想要超级安全,您可以保留发行版的版本sudo apt-get install virtualenvwrapper

注意:在 Ubuntu 14.04 中,我收到一些 pip install 错误,所以我使用pip3 install virtualenv virtualenvwrapper并添加VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3到我的.bashrc/.zshrc文件中。

然后你追加到你的.bashrc文件

export WORKON_HOME
source /usr/local/bin/virtualenvwrapper.sh

并获取它

. ~/.bashrc

基本上就是这样。现在唯一的决定是您是否要创建一个 virtualenv 来包含系统级包

mkvirtualenv --system-site-packages foo

您现有的系统包不必重新安装,它们符号链接到系统解释器的版本。注意:您仍然可以在不使用 sudo 的情况下安装新软件包并升级现有的系统包含的软件包 - 我对其进行了测试,它可以在系统解释器没有任何中断的情况下工作。

kermit@hocus-pocus:~$ sudo apt-get install python-pandas
kermit@hocus-pocus:~$ mkvirtualenv --system-site-packages s
(s)kermit@hocus-pocus:~$ pip install --upgrade pandas
(s)kermit@hocus-pocus:~$ python -c "import pandas; print(pandas.__version__)"
0.10.1
(s)kermit@hocus-pocus:~$ deactivate
kermit@hocus-pocus:~$ python -c "import pandas; print(pandas.__version__)"
0.8.0

如果您想要一个完全分离的环境,另一种选择是

mkvirtualenv --no-site-packages bar

或者鉴于这是默认选项,只需

mkvirtualenv bar

结果是您拥有了一个新的 virtualenv,您可以在其中自由地安装您喜欢的软件包

pip install flask
于 2013-02-05T22:56:02.553 回答
14

Python 3.4 以后

Python 3.3 添加了venv 模块,Python 3.4 添加了ensurepip 模块。这使得引导 pip 变得如此简单:

python -m ensurepip

也许在调用之前venv在虚拟环境中这样做。

PEP 453中描述了保证点。

于 2014-01-30T12:38:57.360 回答
10

On Ubuntu:

sudo apt-get install python-virtualenv

The package python-pip is a dependency, so it will be installed as well.

于 2013-06-27T09:11:03.410 回答
5

我制作了这个程序供我们在工作中使用。

cd ~
curl -s https://pypi.python.org/packages/source/p/pip/pip-1.3.1.tar.gz | tar xvz
cd pip-1.3.1
python setup.py install --user
cd ~
rm -rf pip-1.3.1

$HOME/.local/bin/pip install --user --upgrade pip distribute virtualenvwrapper

# Might want these three in your .bashrc
export PATH=$PATH:$HOME/.local/bin
export VIRTUALENVWRAPPER_VIRTUALENV_ARGS="--distribute"
source $HOME/.local/bin/virtualenvwrapper.sh

mkvirtualenv mypy
workon mypy
pip install --upgrade distribute
pip install pudb # Or whatever other nice package you might want.

安全意识的要点:

  1. curl 进行 ssl 验证。wget 没有。
  2. 从 pip 1.3.1 开始,pip 还进行 ssl 验证。
  3. 与 github tarball 相比,可以上传 pypi tarball 的用户更少。
于 2013-04-24T22:15:18.873 回答
5

更新:截至 2013 年 7 月,该项目不再维护。作者建议使用pyenv。(pyenv 没有对 virtualenv 的内置支持,但可以很好地使用它。)

Pythonbrew是 python 的版本管理器,支持 virtualenv。

在使用 venvs 安装 pythonbrew 和 python-version 之后真的很容易:

# Initializes the virtualenv 
pythonbrew venv init

# Create a virtual/sandboxed environment 
pythonbrew venv create mycoolbundle  

# Use it 
pythonbrew venv use mycoolbundle
于 2013-07-01T09:36:20.907 回答
3

安装 ActivePython。它包括 pip、virtualenv 和 Distribute。

于 2011-03-21T19:31:56.697 回答
3

如果您确定这是您想要做的,那么执行 sudo python setup.py 安装没有问题。

不同之处在于它将使用您操作系统的站点包目录作为要复制的 .py 文件的目标。

因此,如果您希望 pip 在操作系统范围内可访问,那可能就是要走的路。我并不是说其他​​方式不好,但这可能已经足够公平了。

于 2010-12-01T19:10:39.257 回答
3

我在安装升级的 SSL 模块时遇到了各种问题(见下文),即使在 virtualenv 中,在较旧的操作系统提供的 Python 版本之上,所以我现在使用pyenv.

pyenv可以很容易地安装新的 Python 版本并支持 virtualenvs。入门比其他答案中列出的 virtualenv 食谱要容易得多

  • 在 Mac 上,键入brew install pyenv,在 Linux 上,使用pyenv-installer
  • 这将为您提供内置的 virtualenv 支持以及 Python 版本切换(如果需要)
  • 适用于 Python 2 或 3,可以同时安装多个版本

这可以很好地将“新 Python”版本和 virtualenv 与系统 Python 隔离开来。因为您可以轻松使用更新的 Python(2.7.9 之后),所以 SSL 模块已经升级,当然,就像任何现代 virtualenv 设置一样,您与系统 Python 模块隔离。

几个不错的教程:

pyenv-virtualenv插件现在是内置的 - 输入pyenv commands | grep virtualenv检查。我不会使用 pyenv-virtualenvwrapper 插件开始 - 看看你如何使用更集成到 pyenv 的 pyenv-virtualenv,因为它涵盖了 virtualenvwrapper 的大部分功能。

pyenv是仿照的rbenv(Ruby 版本切换的好工具),它唯一的依赖是 bash。

  • pyenv 与非常相似的名称无关pyvenv- 这是一个 virtualenv 等价物,是最近 Python 3 版本的一部分,不处理 Python 版本切换

注意事项

关于 pyenv 的两个警告:

  1. 它只能在 bash 或类似的 shell 中工作——或者更具体地说,pyenv-virtualenv 插件不喜欢dash,它/bin/sh位于 Ubuntu 或 Debian 上。
  2. 它必须从交互式登录 shell(例如bash --login使用终端)运行,这并不总是很容易使用Ansible 等自动化工具来实现。

因此 pyenv 最适合交互式使用,而不适合脚本服务器。

较旧的发行版 - SSL 模块问题

使用的一个原因pyenv是,在使用较旧的系统提供的 Python 版本时,升级 Python SSL 模块经常会出现问题。由于当前的 Linux 发行版支持 Python 3.x,这可能不再是一个问题。

于 2017-05-07T06:56:16.900 回答
2

I came across the same problem recently. I’m becoming more partial to the “always use a virtualenv” mindset, so my problem was to install virtualenv with pip without installing distribute to my global or user site-packages directory. To do this, I manually downloaded distribute, pip and virtualenv, and for each one I ran “python setup.py install --prefix ~/.local/python-private” (with a temporary setting of PYTHONPATH=~/.local/python-private) so that setup scripts were able to find distribute). I’ve moved the virtualenv script to another directory I have on my PATH and edited it so that the distribute and virtualenv modules can be found on sys.path. Tada: I did not install anything to /usr, /usr/local or my user site-packages dir, but I can run virtualenv anywhere, and in that virtualenv I get pip.

于 2011-10-10T15:16:33.160 回答
2
  • 你可以做到这一点,而无需在 python 本身中安装任何东西。

  • 您不需要 sudo 或任何特权。

  • 您无需查找最新版本的virtualenvtar 文件

  • 您无需在 bash 脚本中编辑版本信息来保持最新状态。

  • 您不需要curl/wgettar安装,也不需要pipeasy_install

  • 这适用于 2.7 和 3.X

将以下内容保存到/tmp/initvenv.py

from __future__ import print_function

import os, sys, shutil, tempfile, subprocess, tarfile, hashlib

try:
    from urllib2 import urlopen
except ImportError:
    from urllib.request import urlopen

tmp_dir = tempfile.mkdtemp(prefix='initvenv_')
try:
    # read the latest version from PyPI
    f = urlopen("https://pypi.python.org/pypi/virtualenv/")
    # retrieve the .tar.gz file
    tar_found = False
    url = None
    sha256 = None
    for line in f.read().splitlines():
        if isinstance(line, bytes):
            line = line.decode('utf-8')
        if tar_found:
            if 'sha256' in line:
                sha256 = line.split('data-clipboard-text')[1].split('"')[1]
                break
            continue
        if not tar_found and 'tar.gz">' not in line:
            continue
        tar_found = True
        for url in line.split('"'):
            if url.startswith('https'):
                break
    else:
        print('tar.gz not found')
        sys.exit(1)
    file_name = url.rsplit('/', 1)[1]
    print(file_name)
    os.chdir(tmp_dir)
    data = urlopen(url).read()
    data_sha256 = hashlib.sha256(data).hexdigest()
    if sha256 != data_sha256:
        print('sha256 not correct')
        print(sha256)
        print(data_sha256)
        sys.exit(1)
    with open(file_name, 'wb') as fp:
        fp.write(data)
    tar = tarfile.open(file_name)
    tar.extractall()
    tar.close()
    os.chdir(file_name.replace('.tar.gz', ''))
    print(subprocess.check_output([sys.executable, 'virtualenv.py'] +
                                  [sys.argv[1]]).decode('utf-8'), end='')
    if len(sys.argv) > 2:
        print(subprocess.check_output([
            os.path.join(sys.argv[1], 'bin', 'pip'), 'install', 'virtualenv'] +

            sys.argv[2:]).decode('utf-8'), end='')
except:
    raise
finally:
    shutil.rmtree(tmp_dir)  # always clean up

并将其用作

python_binary_to_use_in_venv /tmp/initvenv.py your_venv_name [optional packages]

例如(如果你真的需要distribute兼容层setuptools

python /tmp/initvenv.py venv distribute

请注意,对于较旧的 python 版本,这可能会给你InsecurePlatformWarnings¹。

一旦你有了你的 virtualenv(名字 eg venv),你可以使用virtualenv刚刚安装的来设置另一个 virtualenv:

venv/bin/virtualenv venv2

###virtualenvwrapper

我建议在一次设置后也看看virtualenvwrapper :

% /opt/python/2.7.10/bin/python /tmp/initvenv.py venv virtualenvwrapper

和激活(可以从您的登录脚本完成):

% source venv/bin/virtualenvwrapper.sh

您可以执行以下操作:

% mktmpenv 
New python executable in tmp-17bdc3054a46b2b/bin/python
Installing setuptools, pip, wheel...done.
This is a temporary environment. It will be deleted when you run 'deactivate'.
(tmp-17bdc3054a46b2b)% 

¹我还没有找到抑制警告的方法。它可以在pip和/或中解决request,但开发人员互相指出原因。我得到了通常不切实际的建议,将我正在使用的 python 版本升级到最新版本。我确信这会破坏我的 Linux Mint 17 安装。幸运的是pip缓存包,因此每次安装包时只会发出一次警告。

于 2015-06-07T09:44:42.293 回答
1

好消息是如果你安装了 python3.4,pyvenv 已经安装好了。所以就

pyvenv project_dir
source project_dir/bin/activate
python --version   
python 3.4.*

现在在这个虚拟环境中,您可以使用 pip 为这个项目安装模块。

离开这个虚拟环境,就

deactivate
于 2015-06-26T04:34:37.213 回答
0

Virtualenv 官方网站上有很好的说明。https://pypi.python.org/pypi/virtualenv

基本上我所做的是安装pipsudo easy_install pip然后使用sudo pip install virtualenv然后创建一个环境:(virtualenv my_env命名你想要的),然后我做了:virtualenv --distribute my_env; 它安装在我distributepipvirtualenv 中。

再次,按照virtualenv页面上的说明进行操作。

有点麻烦,来自 Ruby ;P

于 2013-04-25T04:05:55.113 回答
0

这是安装 virtualenvwrapper 的好方法(更新this)。

下载virtualenv-1.11.4 (你可以在这里找到最新的),解压,打开terminal

# Create a bootstrapenv and activate it:
$ cd ~
$ python <path to unzipped folder>/virtualenv.py bootstrapenv
$ source bootstrapenv/bin/activate

# Install virtualenvwrapper:
$ pip install virtualenvwrapper
$ mkdir -p ~/bootstrapenv/Envs

# append it to file `.bashrc`
$ vi ~/.bashrc
  source ~/bootstrapenv/bin/activate
  export WORKON_HOME=~/bootstrapenv/Envs
  source ~/bootstrapenv/bin/virtualenvwrapper.sh

# run it now.
$ source ~/.bashrc

就是这样,现在你可以使用mkvirtualenv env1, lsvirtualenv..etc

注意:您可以从“下载”文件夹中删除virtualenv-1.11.4和删除。virtualenv-1.11.4.zip

于 2014-04-03T05:24:59.923 回答