问题:为Python安装pip,virtualenv和分发的正确方法是什么?
简短问题
背景
在我对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
and distribute
。(distribute
由于此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的回答使我想到了最初的问题:
Short Question
Background
In my answer to SO question 4314376, I recommended using ez_setup
so that you could then install pip
and virtualenv
as follows:
curl -O http://peak.telecommunity.com/dist/ez_setup.py
sudo python ez_setup.py
sudo easy_install pip
sudo pip install virtualenv
I originally pulled these instructions from Jesse Noller’s blog post So you want to use Python on the Mac?. I like the idea of keeping a clean global site-packages directory, so the only other packages I install there are virtualenvwrapper
and distribute
. (I recently added distribute
to my toolbox because of this Python public service announcement. To install these two packages, I used:
sudo pip install virtualenvwrapper
curl -O http://python-distribute.org/distribute_setup.py
sudo python distribute_setup.py
No more setuptools and easy_install
To really follow that Python public service announcement, on a fresh Python install, I would do the following:
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
Glyph’s Rebuke
In a comment to my answer to SO question 4314376, SO user Glyph stated:
NO. NEVER EVER do sudo python setup.py install
whatever. Write a ~/.pydistutils.cfg that puts your pip installation into ~/.local or something. Especially files named ez_setup.py
tend to suck down newer versions of things like setuptools and easy_install, which can potentially break other things on your operating system.
Back to the short question
So Glyph’s response leads me to my original question:
回答 0
您可以执行此操作而无需在python本身中安装任何东西。
您不需要sudo或任何特权。
您无需编辑任何文件。
将virtualenv安装到引导虚拟环境中。使用该虚拟环境创建更多内容。由于virtualenv附带了pip和分发,因此您一次安装即可获得所有内容。
- 下载virtualenv:
- 解压源压缩包
- 使用解压缩的tarball创建干净的虚拟环境。该虚拟环境将用于“引导”其他环境。您的所有虚拟环境将自动包含pip和分发。
- 使用pip将virtualenv安装到该引导环境中。
- 使用该引导环境创建更多内容!
这是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
)。现在,您可以使用just python virtualenv.py path-to-bootstrap
或来创建引导环境python3 virtualenv.py path-to-bootstrap
。
You can do this without installing anything into python itself.
You don’t need sudo or any privileges.
You don’t need to edit any files.
Install virtualenv into a bootstrap virtual environment. Use the that virtual environment to create more. Since virtualenv ships with pip and distribute, you get everything from one install.
- Download virtualenv:
- Unpack the source tarball
- Use the unpacked tarball to create a clean virtual environment. This virtual environment will be used to “bootstrap” others. All of your virtual environments will automatically contain pip and distribute.
- Using pip, install virtualenv into that bootstrap environment.
- Use that bootstrap environment to create more!
Here is an example in 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
Now you can use your “bootstrap” environment to create more:
# Create a second environment from the first:
$INITIAL_ENV/bin/virtualenv py-env1
# Create more:
$INITIAL_ENV/bin/virtualenv py-env2
Go nuts!
Note
This assumes you are not using a really old version of virtualenv.
Old versions required the flags --no-site-packges
(and depending on the version of Python, --distribute
). Now you can create your bootstrap environment with just python virtualenv.py path-to-bootstrap
or python3 virtualenv.py path-to-bootstrap
.
回答 1
我认为Glyph的意思是这样的:
- 创建目录
~/.local
(如果尚不存在)。
- 在你的
~/.bashrc
,保证~/.local/bin
是PATH
那~/.local
是PYTHONPATH
。
创建一个~/.pydistutils.cfg
包含以下内容的文件
[install]
prefix=~/.local
这是一个标准的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
添加
export WORKON_HOME
source ~/.local/bin/virtualenvwrapper.sh
就是这样,根本不使用sudo
任何功能,并且您的Python环境在中~/.local
,与操作系统的Python完全分开。免责声明:不确定virtualenvwrapper
这种情况下的兼容性-我无法在我的系统上测试它:-)
I think Glyph means do something like this:
- Create a directory
~/.local
, if it doesn’t already exist.
- In your
~/.bashrc
, ensure that ~/.local/bin
is on PATH
and that ~/.local
is on PYTHONPATH
.
Create a file ~/.pydistutils.cfg
which contains
[install]
prefix=~/.local
It’s a standard ConfigParser-format file.
Download distribute_setup.py
and run python distribute_setup.py
(no sudo
). If it complains about a non-existing site-packages
directory, create it manually:
mkdir -p ~/.local/lib/python2.7/site-packages/
Run which easy_install
to verify that it’s coming from ~/.local/bin
- Run
pip install virtualenv
- Run
pip install virtualenvwrapper
- Create a virtual env containing folder, say
~/.virtualenvs
In ~/.bashrc
add
export WORKON_HOME
source ~/.local/bin/virtualenvwrapper.sh
That’s it, no use of sudo
at all and your Python environment is in ~/.local
, completely separate from the OS’s Python. Disclaimer: Not sure how compatible virtualenvwrapper
is in this scenario – I couldn’t test it on my system :-)
回答 2
如果您按照我在此答案中链接的若干教程中的建议进行操作,则无需在Walker和Vinay的答案中进行一些复杂的“手动”步骤即可获得所需的效果。如果您使用的是Ubuntu:
sudo apt-get install python-pip python-dev
在OS X中,可以通过使用自制软件安装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
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
(these are the only packages you need installed globally and I doubt that it will clash with anything system-level from the OS. If you want to be super-safe, you can keep the distro’s versions sudo apt-get install virtualenvwrapper
)
Note: in Ubuntu 14.04 I receive some errors with pip install, so I use pip3 install virtualenv virtualenvwrapper
and add VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
to my .bashrc/.zshrc
file.
You then append to your .bashrc
file
export WORKON_HOME
source /usr/local/bin/virtualenvwrapper.sh
and source it
. ~/.bashrc
This is basically it. Now the only decision is whether you want to create a virtualenv to include system-level packages
mkvirtualenv --system-site-packages foo
where your existing system packages don’t have to be reinstalled, they are symlinked to the system interpreter’s versions. Note: you can still install new packages and upgrade existing included-from-system packages without sudo – I tested it and it works without any disruptions of the system interpreter.
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
The alternative, if you want a completely separated environment, is
mkvirtualenv --no-site-packages bar
or given that this is the default option, simply
mkvirtualenv bar
The result is that you have a new virtualenv where you can freely and sudolessly install your favourite packages
pip install flask
回答 3
从Python 3.4开始
Python 3.3添加了venv模块,Python 3.4添加了surepip模块。这使自举点变得简单:
python -m确保
可能在venv
虚拟环境中呼吁这样做之前。
PEP 453中描述了保证的点子。
Python 3.4 onward
Python 3.3 adds the venv module, and Python 3.4 adds the ensurepip module. This makes bootstrapping pip as easy as:
python -m ensurepip
Perhaps preceded by a call to venv
to do so inside a virtual environment.
Guaranteed pip is described in PEP 453.
回答 4
在Ubuntu上:
sudo apt-get install python-virtualenv
该软件包python-pip
是一个依赖项,因此也将被安装。
On Ubuntu:
sudo apt-get install python-virtualenv
The package python-pip
is a dependency, so it will be installed as well.
回答 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.
安全意识的要点:
- curl会进行ssl验证。wget没有。
- 从pip 1.3.1开始,pip还执行ssl验证。
- 与github tarball相比,更少的用户可以上传pypi tarball。
I made this procedure for us to use at work.
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.
Key points for the security minded:
- curl does ssl validation. wget doesn’t.
- Starting from pip 1.3.1, pip also does ssl validation.
- Fewer users can upload the pypi tarball than a github tarball.
回答 6
更新:自2013年7月起,该项目不再维护。作者建议使用pyenv。(pyenv没有对virtualenv的内置支持,但是可以很好地使用它。)
Pythonbrew是python的版本管理器,并支持virtualenv。
使用venvs安装pythonbrew和python版本后,真的很容易:
# Initializes the virtualenv
pythonbrew venv init
# Create a virtual/sandboxed environment
pythonbrew venv create mycoolbundle
# Use it
pythonbrew venv use mycoolbundle
Update: As of July 2013 this project is no longer maintained. The author suggests using pyenv. (pyenv does not have built-in support for virtualenv, but plays nice with it.)
Pythonbrew is a version manager for python and comes with support for virtualenv.
After installing pythonbrew and a python-version using venvs is really easy:
# Initializes the virtualenv
pythonbrew venv init
# Create a virtual/sandboxed environment
pythonbrew venv create mycoolbundle
# Use it
pythonbrew venv use mycoolbundle
回答 7
如果您确定这是您要执行的操作,则执行sudo python setup.py安装没有问题。
不同之处在于它将使用操作系统的site-packages目录作为要复制的.py文件的目标。
因此,如果您希望点子在整个范围内都可访问,那可能就是方法。我并不是说其他人的方法是不好的,但这可能很公平。
There is no problem to do sudo python setup.py install, if you’re sure it’s what you want to do.
The difference is that it will use the site-packages directory of your OS as a destination for .py files to be copied.
so, if you want pip to be accessible os wide, that’s probably the way to go. I do not say that others way are bad, but this is probably fair enough.
回答 8
回答 9
我最近遇到了同样的问题。我越来越偏爱“始终使用virtualenv”的心态,所以我的问题是使用pip安装virtualenv,而没有将distribution安装到我的全局目录或用户site-packages目录中。为此,我手动下载了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。
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.
回答 10
在较旧的操作系统提供的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的两个警告:
- 它只能从bash或类似贝壳的作品-或者更具体地说,pyenv-的virtualenv插件不一样
dash
,这是/bin/sh
在Ubuntu或Debian的。
- 它必须从交互式登录外壳程序(例如
bash --login
使用终端)运行,使用诸如Ansible之类的自动化工具并不总是很容易实现它。
因此,pyenv最适合交互式使用,而对脚本服务器则不太好。
SSL模块问题
使用的原因之一pyenv
是,在使用较早的系统提供的Python版本时,升级Python SSL模块常常会遇到问题:
I’ve had various problems (see below) installing upgraded SSL modules, even inside a virtualenv, on top of older OS-provided Python versions, so I now use pyenv
.
pyenv makes it very easy to install new Python versions and supports virtualenvs. Getting started is much easier than the recipes for virtualenv listed in other answers:
- On Mac, type
brew install pyenv
and on Linux, use pyenv-installer
- this gets you built-in virtualenv support as well as Python version switching (if required)
- works well with Python 2 or 3, can have many versions installed at once
This works very well to insulate the “new Python” version and virtualenv from system Python. Because you can easily use a more recent Python (post 2.7.9), the SSL modules are already upgraded, and of course like any modern virtualenv setup you are insulated from the system Python modules.
A couple of nice tutorials:
The pyenv-virtualenv
plugin is now built in – type pyenv commands | grep virtualenv
to check. I wouldn’t use the pyenv-virtualenvwrapper plugin to start with – see how you get on with pyenv-virtualenv which is more integrated into pyenv, as this covers most of what virtualenvwrapper does.
pyenv
is modelled on rbenv
(a good tool for Ruby version switching) and its only dependency is bash.
- pyenv is unrelated to the very similarly named
pyvenv
– that is a virtualenv equivalent that’s part of recent Python 3 versions, and doesn’t handle Python version switching
Caveats
Two warnings about pyenv:
- It only works from a bash or similar shell – or more specifically, the pyenv-virtualenv plugin doesn’t like
dash
, which is /bin/sh
on Ubuntu or Debian.
- It must be run from an interactive login shell (e.g.
bash --login
using a terminal), which is not always easy to achieve with automation tools such as Ansible.
Hence pyenv is best for interactive use, and less good for scripting servers.
SSL module problems
One reason to use pyenv
is that there are often problems with upgrading Python SSL modules when using older system-provided Python versions:
回答 11
您可以执行此操作而无需在python本身中安装任何东西。
您不需要sudo或任何特权。
您无需查找virtualenv
tar文件的最新版本
您无需在bash脚本中编辑版本信息即可保持最新状态。
你不需要curl
/ wget
或tar
安装,也不pip
或easy_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
s¹。
获得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
缓存了软件包,因此每次安装软件包时仅发出一次警告。
You can do this without installing anything into python itself.
You don’t need sudo or any privileges.
You don’t need to find the latest version of a virtualenv
tar file
You don’t need to edit version info in a bash script to keep things up-to-date.
You don’t need curl
/wget
or tar
installed, nor pip
or easy_install
this works for 2.7 as well as for 3.X
Save the following to /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
and use it as
python_binary_to_use_in_venv /tmp/initvenv.py your_venv_name [optional packages]
e.g. (if you really need the distribute
compatibility layer for setuptools
)
python /tmp/initvenv.py venv distribute
Please note that, with older python versions, this might give you InsecurePlatformWarning
s¹.
Once you have your virtualenv (name e.g. venv
) you can setup another virtualenv by using the virtualenv
just installed:
venv/bin/virtualenv venv2
virtualenvwrapper
I recommend taking a look at virtualenvwrapper as well, after a one time setup:
% /opt/python/2.7.10/bin/python /tmp/initvenv.py venv virtualenvwrapper
and activation (can be done from your login script):
% source venv/bin/virtualenvwrapper.sh
you can do things like:
% 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)%
¹ I have not found a way to suppress the warning. It could be solved in pip
and/or request
, but the developers point to each other as the cause. I got the, often non-realistic, recommendation to upgrade the python version I was using to the latest version. I am sure this would break e.g my Linux Mint 17 install. Fortunately pip
caches packages, so the Warning is made
only once per package install.
回答 12
在Virtualenv官方网站上有很好的说明。https://pypi.python.org/pypi/virtualenv
基本上我做什么,是安装pip
有sudo easy_install pip
,然后用于sudo pip install virtualenv
再创建一个环境:virtualenv my_env
(命名为你想要的),下面是我所做的:virtualenv --distribute my_env
; 其安装distribute
和pip
在我的virtualenv。
再次,按照virtualenv
页面上的说明进行操作。
有点麻烦,来自Ruby; P
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.
Kind of a hassle, coming from Ruby ;P
回答 13
这是安装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
…等
注意:您可以删除virtualenv-1.11.4
,并virtualenv-1.11.4.zip
从下载文件夹。
Here is a nice way to install virtualenvwrapper(update of this).
Download virtualenv-1.11.4 (you can find latest at here), Unzip it, open 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
That is it, now you can use mkvirtualenv env1
, lsvirtualenv
..etc
Note: you can delete virtualenv-1.11.4
and virtualenv-1.11.4.zip
from Downloads folders.
回答 14
好消息是,如果您已安装python3.4,则已经安装了pyvenv。所以就
pyvenv project_dir
source project_dir/bin/activate
python --version
python 3.4.*
现在,在此虚拟环境中,您可以使用pip为该项目安装模块。
离开这个虚拟环境,
deactivate
The good news is if you have installed python3.4, pyvenv is already been installed. So, Just
pyvenv project_dir
source project_dir/bin/activate
python --version
python 3.4.*
Now in this virtual env, you can use pip to install modules for this project.
Leave this virtual env , just
deactivate