为 Python 安装 pip、virtualenv 和 deliver 的正确方法是什么?

2025-02-12 10:03:00
admin
原创
63
摘要:问题描述:简短问题pip安装、virtualenv和 的正确方法是什么distribute?背景在我对SO 问题 4314376的回答中,我建议使用ez_setup,以便您可以按pip如下virtualenv方式安装:curl -O http://peak.telecommunity.com/dist/ez_...

问题描述:

简短问题

  • pip安装、virtualenv和 的正确方法是什么distribute

背景

在我对SO 问题 4314376的回答中,我建议使用ez_setup,以便您可以按pip如下virtualenv方式安装:

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?》中提取了这些说明。我喜欢保持干净的全局 site-packages 目录的想法,因此我在那里安装的其他软件包只有 virtualenvwrapper和。(由于这个 Python 公共服务公告,distribute我最近将它们添加到我的工具箱中。要安装这两个包,我使用了: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 的回答让我想到了我最初的问题:

  • pip安装、virtualenv和 的正确方法是什么distribute


解决方案 1:

您无需在 Python 本身中安装任何东西就可以做到这一点。

您不需要 sudo 或任何权限。

您不需要编辑任何文件。

将 virtualenv 安装到 bootstrap 虚拟环境中。使用该虚拟环境创建更多环境。由于 virtualenv 附带 pip 和 deliver,因此您只需安装一次即可获得所有内容。

  1. 下载虚拟环境:

* http://pypi.python.org/pypi/virtualenv
* https://pypi.python.org/packages/source/v/virtualenv/virtualenv-12.0.7.ta 
​​r.gz (或最新版本!)
  1. 解压源代码

  2. 使用解压后的 tarball 创建一个干净的虚拟环境。此虚拟环境将用于“引导”其他环境。您的所有虚拟环境将自动包含 pip 和 deliver。

  3. 使用 pip 将 virtualenv 安装到该引导环境中。

  4. 使用该引导环境来创造更多!

以下是 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

现在您可以使用“bootstrap”环境来创建更多内容:

# 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`

解决方案 2:

我认为 Glyph 的意思是做这样的事情:

  1. ~/.local如果目录不存在,则创建一个目录。

  2. 在您的 中~/.bashrc,确保~/.local/bin处于开启状态PATH并且~/.local处于开启状态PYTHONPATH

  3. ~/.pydistutils.cfg创建包含以下内容的文件

[install]
prefix=~/.local

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

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

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

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

  2. 跑步pip install virtualenv

  3. 跑步pip install virtualenvwrapper

  4. 创建一个包含文件夹的虚拟环境,比如~/.virtualenvs

  5. 添加~/.bashrc

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

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

解决方案 3:

如果您按照我在此答案中链接的几个教程中建议的步骤操作,则可以获得所需的效果,而无需 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

基本上就是这样。现在唯一的决定是你是否要创建一个虚拟环境来包含系统级包

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

结果是您有一个新的虚拟环境,您可以在其中自由且无需 sudo 地安装您最喜欢的软件包

pip install flask

解决方案 4:

Python 3.4 及以上版本

Python 3.3 添加了venv 模块,Python 3.4 添加了Ensurepip 模块。这使得引导 pip 变得非常简单:

python-m 确保pip

venv也许需要先在虚拟环境中调用才能执行此操作。

PEP 453中描述了保证点数。

解决方案 5:

在 Ubuntu 上:

sudo apt-get install python-virtualenv

该包python-pip是一个依赖项,因此它也将被安装。

解决方案 6:

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

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 的用户可以更少。

解决方案 7:

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

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

安装 pythonbrew 和 python 版本后使用 venvs 真的很容易:

# Initializes the virtualenv 
pythonbrew venv init

# Create a virtual/sandboxed environment 
pythonbrew venv create mycoolbundle  

# Use it 
pythonbrew venv use mycoolbundle

解决方案 8:

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

pyenv可以非常轻松地安装新的 Python 版本并支持虚拟环境。入门比其他答案中列出的虚拟环境配方要容易得多:

  • 在 Mac 上,输入pyenv-installer brew install pyenv;在 Linux 上,使用pyenv-installer

  • 这将为你提供内置的虚拟环境支持以及 Python 版本切换(如果需要)

  • 与 Python 2 或 3 配合良好,可以同时安装多个版本

这对于将“新 Python”版本和虚拟环境与系统 Python 隔离开来非常有效。由于您可以轻松使用较新的 Python(2.7.9 之后),因此 SSL 模块已升级,当然,与任何现代虚拟环境设置一样,您与系统 Python 模块隔离开来。

一些不错的教程:

  • 使用 pyenv 和 virtualenv - 选择 Python 版本时,更容易使用pyenv global 3.9.1(全局到当前用户)或pyenv local 3.6.3(本地到当前目录)。

  • pyenv 基础知识以及与 virtualenv 一起使用

pyenv-virtualenv插件现已内置 - 输入pyenv commands | grep virtualenv以检查。我不会首先使用 pyenv-virtualenvwrapper 插件 - 看看你如何使用 pyenv-virtualenv,它与 pyenv 的集成度更高,因为它涵盖了 virtualenvwrapper 的大部分功能。

pyenv是以rbenv(Ruby 版本切换的一个很好的工具)为模型的,它的唯一依赖项是 bash。

  • pyenv 与名称非常相似的版本无关pyvenv- 后者是最新 Python 3 版本中的虚拟环境,不处理 Python 版本切换

注意事项

关于 pyenv 的两个警告:

  1. 它只能在 bash 或类似的 shell 中工作 - 或者更具体地说,pyenv-virtualenv 插件不喜欢Ubuntu 或 Debian 上dash/bin/sh

  2. 它必须从交互式登录 shell 运行(例如bash --login使用终端),而这并不总是能够通过Ansible 等自动化工具轻易实现。

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

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

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

解决方案 9:

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

不同之处在于,它将使用操作系统的 site-packages 目录作为要复制 .py 文件的目的地。

因此,如果您希望 pip 在整个操作系统中均可访问,那么这可能是可行的方法。我并不是说其他​​方法不好,但这种方法可能已经足够公平了。

解决方案 10:

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

解决方案 11:

我最近遇到了同样的问题。我越来越倾向于“始终使用虚拟环境”的思维模式,所以我的问题是使用 pip 安装虚拟环境,而不将分发安装到我的全局或用户站点包目录中。为此,我手动下载了分发、pip 和虚拟环境,然后对每个运行“python setup.py install --prefix ~/.local/python-private”(临时设置为 PYTHONPATH=~/.local/python-private),以便安装脚本能够找到分发)。我已将虚拟环境脚本移动到 PATH 上的另一个目录并对其进行了编辑,以便可以在 sys.path 上找到分发和虚拟环境模块。Tada:我没有在 /usr、/usr/local 或我的用户站点包目录中安装任何东西,但我可以在任何地方运行虚拟环境,并且在该虚拟环境中我得到了 pip。

解决方案 12:

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

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

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

离开这个虚拟环境,只需

deactivate

解决方案 13:

  • 您无需在 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¹。

一旦有了虚拟环境(例如名称venv),您就可以使用刚刚安装的设置另一个虚拟环境virtualenv

venv/bin/virtualenv venv2

虚拟环境包装器

我建议在一次性设置之后也看一下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缓存了软件包,因此每个软件包安装只会发出一次警告。

解决方案 14:

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

基本上我所做的是,使用 安装pipsudo easy_install pip然后使用sudo pip install virtualenv然后创建一个环境:virtualenv my_env(将其命名为您想要的),接下来我做了:virtualenv --distribute my_env;它安装distributepip在我的虚拟环境中。

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

有点麻烦,来自 Ruby ;P

解决方案 15:

这是一个安装 virtualenvwrapper 的好方法(此更新)。

下载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 env1lsvirtualenv等等

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

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   2048  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1454  
  汽车行业正处于快速变革的时代,产品生命周期管理(PLM)流程的优化与再造对于企业的竞争力至关重要。关键链管理工具作为提升PLM流程效率和质量的有效手段,在汽车行业中得到了广泛应用。通过持续改进实践,这些工具能够更好地适应企业发展需求,助力汽车企业在激烈的市场竞争中脱颖而出。关键链管理工具在PLM流程中的重要性关键链管理...
plm软件   1  
  法规变化对 PLM 合规性管理的挑战全球法规处于不断变化的动态之中,这给 PLM(产品生命周期管理)合规性管理带来了诸多棘手的挑战。首先,法规的更新速度日益加快,不同国家和地区在产品安全、环保、知识产权等方面的法规要求持续演变。企业需要时刻关注这些变化,确保产品从设计、研发到生产、销售的全流程都符合最新法规。然而,要精...
PLM软件   1  
  在项目管理领域,PLM(产品生命周期管理)项目的顺利推进至关重要,而其中项目进度的有效控制是关键环节。尤其是在设定了明确的时间节点如2025年这样的目标时,如何运用甘特图进行时间跟踪并优化,进而实现项目进度的压缩,成为众多项目管理者关注的焦点。合理的进度压缩技巧不仅能确保项目按时交付,还能提升资源利用效率,降低成本,增...
plm项目管理系统是什么   1  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用