为Python安装pip,virtualenv和分发的正确方法是什么?

2020/11/06 09:52 · python ·  · 0评论

简短问题

背景

SO问题4314376的回答,我建议使用,以便随后进行安装如下所示:ez_setuppipvirtualenv

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目录的想法,因此我安装的唯一其他软件包是 virtualenvwrapperand distributedistribute由于这个Python公共服务公告,我最近添加到了我的工具箱中。要安装这两个软件包,我使用了:

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

没有更多的设置工具和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的回答使我想到了最初的问题:

您可以执行此操作而无需在python本身中安装任何东西

您不需要sudo或任何特权。

您不需要编辑任何文件。

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

  1. 下载virtualenv:

  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)。现在,您可以使用justpython virtualenv.py path-to-bootstrap来创建引导环境python3 virtualenv.py path-to-bootstrap

我认为Glyph的意思是这样的:

  1. 创建目录~/.local(如果尚不存在)。
  2. 在你的~/.bashrc,保证~/.local/binPATH~/.localPYTHONPATH
  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这种情况下的兼容性-我无法在我的系统上进行测试:-)

If you follow the steps advised in several tutorials I linked in this answer, you
can get the desired effect without the somewhat complicated "manual" steps in Walker's and Vinay's answers. If you're on Ubuntu:

sudo apt-get install python-pip python-dev

The equivalent is achieved in OS X by using homebrew to install python (more details here).

brew install python

With pip installed, you can use it to get the remaining packages (you can omit sudo in OS X, as you're using your local python installation).

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

从Python 3.4开始

Python 3.3添加了venv模块,Python 3.4添加了surepip模块这使得自举点很容易:

python -m确保

可能在venv虚拟环境中要求这样做之前

PEP 453中描述了保证的点子

在Ubuntu上:

sudo apt-get install python-virtualenv

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

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

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

如果您确定这是您要执行的操作,则执行sudo python setup.py安装没有问题。

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

因此,如果您希望点子在整个范围内都可访问,那可能就是方法。我并不是说别人的方法是坏的,但这可能是很公平的。

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

在较旧的操作系统提供的Python版本之上,即使在virtualenv中也安装了升级的SSL模块时,我遇到了各种各样的问题(请参阅下文),所以我现在使用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或类似贝壳的作品-或者更具体地说,pyenv-的virtualenv插件不一样dash,这是/bin/sh在Ubuntu或Debian的。
  2. 它必须从交互式登录外壳程序(例如bash --login使用终端)运行,而使用Ansible之类的自动化工具并不总是很容易做到这一点

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

SSL模块问题

使用的原因之一pyenv是,在使用较早的系统提供的Python版本时,升级Python SSL模块常常会遇到问题:

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

  • 您可以执行此操作而无需在python本身中安装任何东西。

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

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

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

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

  • 这适用于2.7和3.X

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

将来导入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版本,这可能会给您 InsecurePlatformWarning¹。

获得virtualenv(例如名称venv)后,您可以使用virtualenv刚刚安装的虚拟环境来设置另一个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缓存软件包,因此每个软件包安装仅发出一次警告。

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

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

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

Leave this virtual env , just

deactivate

There are good instructions on the Virtualenv official site. https://pypi.python.org/pypi/virtualenv

Basically what I did, is install pip with sudo easy_install pip, then used sudo pip install virtualenv then created an environment with: virtualenv my_env (name it what you want), following that I did: virtualenv --distribute my_env; which installed distribute and pip in my virtualenv.

Again, follow the instruction on the virtualenv page.

有点麻烦,来自Ruby; P

这是安装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.4,并virtualenv-1.11.4.zip从下载文件夹。

本文地址:http://python.askforanswer.com/weipythonanzhuangpipvirtualenvhefenfadezhengquefangfashishenme.html
文章标签: ,   ,   ,  
版权声明:本文为原创文章,版权归 admin 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!