首页 文章

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

提问于
浏览
242

简短问题

背景

my answerSO 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的博客文章So you want to use Python on the Mac?中提取了这些说明 . 我喜欢保持一个干净的全局site-packages目录的想法,所以我安装的其他软件包只有virtualenvwrapperdistribute . (由于this Python public service announcement,我最近将distribute添加到了我的工具箱 . 要安装这两个软件包,我使用了:

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

没有更多的setuptools和easy_install

要真正关注that Python public service announcement,在全新的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

雕文的Rebuke

在对my answerSO question 4314376的评论中,SO用户Glyph声明:

不 . 从来没有做过sudo python setup.py安装什么 . 写一个〜/ .pydistutils.cfg,将你的pip安装放到〜/ .local或其他东西 . 特别是名为ez_setup.py的文件往往会吸引更新版本的东西,例如setuptools和easy_install,这可能会破坏操作系统上的其他东西 .

回到简短的问题

所以Glyph's response引导我到我原来的问题:

15 回答

  • 16

    您可以在不将 anything 安装到python本身的情况下执行此操作 .

    您不需要sudo或任何权限 .

    您无需编辑任何文件 .

    将virtualenv安装到引导程序虚拟环境中 . 使用该虚拟环境创建更多 . 由于virtualenv带有pip和分发,你可以从一次安装中获得所有东西 .

    这是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-bootstrappython3 virtualenv.py path-to-bootstrap 创建引导环境 .

  • 0

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

    • 创建目录 ~/.local (如果它尚不存在) .

    • ~/.bashrc 中,确保 ~/.local/binPATH 上,且 ~/.localPYTHONPATH 上 .

    • 创建一个包含的文件 ~/.pydistutils.cfg

    [install]
    prefix=~/.local
    

    它是标准的ConfigParser格式文件 .

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

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

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

    • 运行 pip install virtualenv

    • 运行 pip install virtualenvwrapper

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

    • ~/.bashrc 添加

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

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

  • 0

    如果您按照我在this answer中链接的几个教程中建议的步骤,您可以获得所需的效果,而无需Walker 's and Vinay'的答案中有些复杂的"manual"步骤 . 如果你在Ubuntu:

    sudo apt-get install python-pip python-dev
    

    通过使用自制软件安装python,可以在OS X中实现等效(更多细节here) .

    brew install python
    

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

    sudo pip install virtualenvwrapper
    

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

    Note: 在Ubuntu 14.04中我收到some errors with 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
    

    您现有的系统软件包所在的版本_1319571的版本 . 注意:您仍然可以安装新软件包并升级现有的包含系统软件包而不使用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
    
  • 2

    Python 3.4以后

    Python 3.3添加venv module,Python 3.4添加ensurepip module . 这使得bootstrapping pip变得如此简单:

    python -m ensurepip

    也许之前是在虚拟环境中调用 venv .

    保证点在PEP 453中描述 .

  • 5

    在Ubuntu上:

    sudo apt-get install python-virtualenv

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

  • 3

    我让这个程序供我们在工作中使用 .

    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.
    

    安全意识的要点:

    • curl进行ssl验证 . wget没有 .

    • 从pip 1.3.1开始,pip也进行了ssl验证 .

    • 用户可以上传pypi tarball而不是github tarball .

  • 0

    Update: 截至2013年7月,该项目已不再维护 . 作者建议使用pyenv . (pyenv没有内置的virtualenv支持,但是对它很好 . )

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

    安装pythonbrew和使用venvs的python版本之后非常简单:

    # Initializes the virtualenv 
    pythonbrew venv init
    
    # Create a virtual/sandboxed environment 
    pythonbrew venv create mycoolbundle  
    
    # Use it 
    pythonbrew venv use mycoolbundle
    
  • 5

    没有问题做sudo python setup.py安装,如果你确定它是你想要做的 .

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

    所以,如果你希望pip可以在宽范围内访问,那可能就是这样 . 我不是说其他方式不好,但这可能是公平的 .

  • 21

    Install ActivePython . 它包括pip,virtualenv和Distribute .

  • 3

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

  • 171

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

    pyenv使得安装新的Python版本变得非常容易并且支持virtualenvs . 入门比其他答案中列出的virtualenv的配方更容易 much

    • 在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-virtualenv更加集成到pyenv,因为这涵盖了virtualenvwrapper所做的大部分工作 .

    pyenv 建模在 rbenv (一个很好的Ruby版本切换工具)和它的唯一依赖是bash .

    • pyenv与名称相似的 pyvenv 无关 - 这是's part of recent Python 3 versions, and doesn't处理Python版本切换的virtualenv等价物

    警告

    关于pyenv的两个警告:

    • 它只适用于bash或类似的shell - 或者更具体地说,pyenv-virtualenv插件不喜欢 dash ,它在Ubuntu或Debian上是 /bin/sh .

    • 必须从交互式登录shell(例如使用终端的 bash --login )运行,使用自动化工具such as Ansible并不总是很容易实现 .

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

    SSL模块问题

    使用 pyenv 的一个原因是,在使用旧的系统提供的Python版本时,升级Python SSL模块时经常出现问题:

  • 10
    • 你可以这样做,而无需在python本身安装任何东西 .

    • 您不需要sudo或任何权限 .

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

    • 您无需在bash脚本中编辑版本信息以使其保持最新状态 .

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

    • 这适用于2.7和3.X

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

    来自 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]
    

    例如(如果你真的需要 distributedistribute 兼容层)

    python /tmp/initvenv.py venv distribute
    

    请注意,对于较旧的python版本,这可能会给你 InsecurePlatformWarning s¹ .

    一旦你拥有了virtualenv(名称为 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和/或请求中解决,但开发人员指出彼此是原因 . 我得到了通常不现实的建议,将我使用的python版本升级到最新版本 . 我确信这会破坏我的Linux Mint 17安装 . 幸运的是pip缓存了包,因此每个包安装只发生一次警告 .

  • 2

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

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

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

    有点麻烦,来自Ruby; P

  • 12

    这是一个很好的安装virtualenvwrapper的方法(更新) .

    下载virtualenv-1.11.4(你可以找到最新的here),解压缩,打开 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 .

  • 2

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

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

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

    请保留此虚拟环境

    deactivate
    

相关问题