简短问题
- 安装pip,virtualenv和distribute的正确方法是什么?
背景
在my answer到SO question 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的博客文章So you want to use Python on the Mac?中提取了这些说明 . 我喜欢保持一个干净的全局site-packages目录的想法,所以我安装的其他软件包只有virtualenvwrapper和distribute . (由于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 answer至SO question 4314376的评论中,SO用户Glyph声明:
不 . 从来没有做过sudo python setup.py安装什么 . 写一个〜/ .pydistutils.cfg,将你的pip安装放到〜/ .local或其他东西 . 特别是名为ez_setup.py的文件往往会吸引更新版本的东西,例如setuptools和easy_install,这可能会破坏操作系统上的其他东西 .
回到简短的问题
所以Glyph's response引导我到我原来的问题:
- 安装pip,virtualenv和distribute的正确方法是什么?
15 回答
您可以在不将 anything 安装到python本身的情况下执行此操作 .
您不需要sudo或任何权限 .
您无需编辑任何文件 .
将virtualenv安装到引导程序虚拟环境中 . 使用该虚拟环境创建更多 . 由于virtualenv带有pip和分发,你可以从一次安装中获得所有东西 .
下载virtualenv:
http://pypi.python.org/pypi/virtualenv
https://pypi.python.org/packages/source/v/virtualenv/virtualenv-12.0.7.tar.gz(或者是最新版本!)
解压缩源tarball
使用解压缩的tarball创建一个干净的虚拟环境 . 其他虚拟环境将用于其他人 . 您的所有虚拟环境都将自动包含pip和分发 .
使用pip,将virtualenv安装到该引导程序环境中 .
使用该引导环境创建更多!
这是bash中的一个例子:
现在您可以使用“bootstrap”环境来创建更多:
发疯!
注意
这假设您没有使用真正旧版本的virtualenv . 旧版本需要标志
--no-site-packges
(并且取决于Python的版本,--distribute
) . 现在,您可以使用python virtualenv.py path-to-bootstrap
或python3 virtualenv.py path-to-bootstrap
创建引导环境 .我认为Glyph意味着做这样的事情:
创建目录
~/.local
(如果它尚不存在) .在
~/.bashrc
中,确保~/.local/bin
在PATH
上,且~/.local
在PYTHONPATH
上 .创建一个包含的文件
~/.pydistutils.cfg
它是标准的ConfigParser格式文件 .
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
添加就是这样,根本没有使用
sudo
,你的Python环境是~/.local
,完全独立于操作系统的Python . 免责声明:不确定virtualenvwrapper
在这种情况下的兼容性如何 - 我无法在我的系统上测试它:-)如果您按照我在this answer中链接的几个教程中建议的步骤,您可以获得所需的效果,而无需Walker 's and Vinay'的答案中有些复杂的"manual"步骤 . 如果你在Ubuntu:
通过使用自制软件安装python,可以在OS X中实现等效(更多细节here) .
安装
pip
后,您可以使用它来获取剩余的包(您可以在OS X中省略sudo
,因为您正在使用本地python安装) .(这些是你需要全局安装的唯一软件包,我怀疑它会与操作系统中的任何系统级别发生冲突 . 如果你想要超级安全,你可以保留发行版的版本
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
文件并采购它
基本上就是这样 . 现在唯一的决定是您是否要创建virtualenv以包含系统级包
您现有的系统软件包所在的版本_1319571的版本 . 注意:您仍然可以安装新软件包并升级现有的包含系统软件包而不使用sudo - 我对其进行了测试,并且它可以在不中断系统解释程序的情况下运行 .
如果你想要一个完全分离的环境,另一种选择是
或者只要这是默认选项
结果是你有了一个新的virtualenv,你可以自由而无忧地安装你最喜欢的包
Python 3.4以后
Python 3.3添加venv module,Python 3.4添加ensurepip module . 这使得bootstrapping pip变得如此简单:
也许之前是在虚拟环境中调用
venv
.保证点在PEP 453中描述 .
在Ubuntu上:
sudo apt-get install python-virtualenv
包
python-pip
是一个依赖项,因此它也将被安装 .我让这个程序供我们在工作中使用 .
安全意识的要点:
curl进行ssl验证 . wget没有 .
从pip 1.3.1开始,pip也进行了ssl验证 .
用户可以上传pypi tarball而不是github tarball .
Update: 截至2013年7月,该项目已不再维护 . 作者建议使用pyenv . (pyenv没有内置的virtualenv支持,但是对它很好 . )
Pythonbrew 是python的版本管理器,并且支持virtualenv .
安装pythonbrew和使用venvs的python版本之后非常简单:
没有问题做sudo python setup.py安装,如果你确定它是你想要做的 .
不同之处在于它将使用操作系统的site-packages目录作为要复制的.py文件的目标 .
所以,如果你希望pip可以在宽范围内访问,那可能就是这样 . 我不是说其他方式不好,但这可能是公平的 .
Install ActivePython . 它包括pip,virtualenv和Distribute .
我最近遇到了同样的问题 . 我越来越偏向于“总是使用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我得到了点子 .
我有各种各样的问题(见下文)安装升级的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模块隔离 .
一些很好的教程:
Using pyenv and virtualenv - 选择Python版本时,使用
pyenv global 3.6.1
(全局到当前用户)或pyenv local 2.7.13
(当前目录的本地)更容易 .pyenv basics and use with virtualenv
pyenv-virtualenv
插件现在内置 - 类型pyenv commands | grep virtualenv
来检查 . 我不会使用pyenv-virtualenvwrapper插件开始 - 看看你如何使用pyenv-virtualenv更加集成到pyenv,因为这涵盖了virtualenvwrapper所做的大部分工作 .pyenv
建模在rbenv
(一个很好的Ruby版本切换工具)和它的唯一依赖是bash .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模块时经常出现问题:Ubuntu 14.04 includes Python 2.7.6 requires considerable effort将其升级到正确的SSL模块,以便将SNI(服务器名称指示)作为客户端处理 . (我为此写了一些Ansible脚本,非常痛苦,但在某些情况下仍然存在 . )
升级的SSL模块在2017年和2018年将更加重要Python.org sites move to TLS 1.2 only .
你可以这样做,而无需在python本身安装任何东西 .
您不需要sudo或任何权限 .
您无需查找
virtualenv
tar文件的最新版本您无需在bash脚本中编辑版本信息以使其保持最新状态 .
您不需要安装
curl
/wget
或tar
,也不需要pip
或easy_install
这适用于2.7和3.X
将以下内容保存到
/tmp/initvenv.py
:来自 future import print_function
并用它作为
例如(如果你真的需要
distribute
的distribute
兼容层)请注意,对于较旧的python版本,这可能会给你
InsecurePlatformWarning
s¹ .一旦你拥有了virtualenv(名称为
venv
),你可以使用刚安装的virtualenv
设置另一个virtualenv:virtualenvwrapper
经过一次设置后,我建议您也查看virtualenvwrapper:
和激活(可以从您的登录脚本完成):
你可以做以下事情:
¹我还没有办法抑制警告 . 它可以在pip和/或请求中解决,但开发人员指出彼此是原因 . 我得到了通常不现实的建议,将我使用的python版本升级到最新版本 . 我确信这会破坏我的Linux Mint 17安装 . 幸运的是pip缓存了包,因此每个包安装只发生一次警告 .
Virtualenv官方网站上有很好的说明 . https://pypi.python.org/pypi/virtualenv
基本上我所做的是安装
pip
与sudo easy_install pip
,然后使用sudo pip install virtualenv
然后创建一个环境:virtualenv my_env
(将其命名为你想要的),然后我做了:virtualenv --distribute my_env
;在我的virtualenv中安装了distribute
和pip
.再次按照
virtualenv
页面上的说明进行操作 .有点麻烦,来自Ruby; P
这是一个很好的安装virtualenvwrapper的方法(更新) .
下载virtualenv-1.11.4(你可以找到最新的here),解压缩,打开
terminal
就是这样,现在你可以使用
mkvirtualenv env1
,lsvirtualenv
..等注意:您可以从下载文件夹中删除
virtualenv-1.11.4
和virtualenv-1.11.4.zip
.好消息是如果你已经安装了python3.4,已经安装了pyvenv . 所以就
现在,在此虚拟环境中,您可以使用pip为此项目安装模块 .
请保留此虚拟环境