http://blog.csdn.net/pipisorry/article/details/47008981
python虚拟环境virtualenv
VirtualEnv用于在一台机器上创建多个独立的python运行环境,VirtualEnvWrapper为前者提供了一些便利的命令行上的封装。
Virtualenv是一个非常好的virtual python environment builder,他最大的好处是,可以让每一个python项目单独使用一个环境,而不会影响python系统环境,也不会影响其他项目的环境。
Virtualenv可用于创建独立的Python环境,在这些环境里面可以选择不同的Python版本或者不同的Packages,并且可以在没有root权限的情况下在环境里安装新套件,互相不会产生任何的影响。
为什么要用virtualenv
- 隔离项目之间的第三方包依赖,如A项目依赖django1.2.5,B项目依赖django1.3。
- 为部署应用提供方便,把开发环境的虚拟环境打包到生产环境即可,不需要在服务器上再折腾一翻。在服务器上都不用安装virtualenv,直接将virtualenv创建的目录拷贝到服务器,修改路径,进行虚拟环境迁移就可以用了。
- 还可以用在没有root权限的python环境配置上,如果没有root权限,可以先自己搞一个virtualenv,再在virtualenv中使用pip安装。(系统中没有pip,并且也没有root权限使用sudo apt-get安装)
安装的库的位置
env/Lib/site-packages/目录里,而不是在系统的python的Lib/site-packages目录里,这样你就知道为什么虚拟环境是分开的了吧。
Note:virtualenv 创建的虚拟环境与主机的 Python 环境完全无关,你主机配置的库不能在 virtualenv 中直接使用。你需要在虚拟环境中利用 pip install 再次安装配置后才能使用。
Virtualenv的安装
Note:已经安装了python3的这一步可能不要, python3自带了pyvenv,用这个就行,以前的 virtualenv myVenv --python=python3 老是报错
pip安装virtualenv
pip install virtualenv #py2安装
pip3 install virtualenv #py3安装,这样用virtualenv创建的virtualenv默认是使用py3
这时python3.4.2\Lib\site-packages目录下会出现两个新子目录virtualenv_support、virtualenv-13.1.0.dist-info
安装Virtualenvwrapper
[可能需要掌握一些常见的virtualenvwrapper的命令,方便管理Python的版本,链接在:
http://www.doughellmann.com/docs/virtualenvwrapper/command_ref.html]
安装完以后,创建一个虚拟环境,然后在安装virtualenvwrapper
virtualenv ENV #ENV 为环境的名字,可以任意设置,其实就是一个文件夹,在home下的用户名文件夹下可以找到。
source ENV/bin/activate #这样进进入了virtualenv的虚拟开发环境。
进入虚拟环境以后命令行最开始的地方会显示(ENV),代表已经进入了这个环境,然后就可以安装virtualenvwrapper和Django了
输入命令行pip install virtualenvwrapper
这里可以不用sudo,因为在virtualenv里,不用管理权限也算是很方便的设计之一。
virtualenvwrapper安装后,它会把virtualenv列为依赖包,所以会自动安装。
打开一个新的shell,输入mkvirtualenv test
。如果你打开另外一个shell,则你就不在这个virtualenv中了,你可以通过workon test
来启动。如果你的工作完成了,可以使用deactivate
来停用。
创建虚拟环境并进入使用
用系统默认python版本创建虚拟环境
virtualenv --no-site-packages ubuntu_env
linux下:
windows下:
就可以在当前目录创建一个env目录(虚拟环境名称,这个文件夹就是保存 Python 虚拟环境),你会注意到,virtualenv会把python,setuptools和pip给你安装上。
Note: virtualenv在py3下安装的,只有py3为系统默认python版本时才能使用virtualenv命令,否则会提示没有这个命令。
自定义python版本创建虚拟环境
1. 安装需要版本的python
2. 指定virtualenv中的python版本
virtualenv --no-site-packages --python=2.7 env
Note:
1. 创建virtualenv虚拟环境之前,系统中必须要安装有对应版本的python,并且卸载之后当前虚拟环境就无效了。系统中可以同时存在python2和python3,通过环境变量中的系统变量path(不是用户变量)控制cmd或者系统中使用哪个版本的python,哪个版本的路径在前面就优先使用哪个版本。
2. –no-site-packages表示不包括系统全局的Python安装包,这样会更令环境更干净
2. –python=python2.7指定Python的版本未系统已经安装了的Python2.7
3. env是建立的虚拟环境名称
4 .没有安装python2.7或者使用命令virtualenv --no-site-packages --python=python2.7 env会出现The executable python does notexist 错误
进入虚拟环境并激活
Linux(mac os):
. ubuntu_env/bin/activate
pika:/media/pika/files/mine/python_workspace/NLP$d env
Going to /media/pika/files/mine/ENV
pika:/media/pika/files/mine/ENV$. ubuntu_env/bin/activate
(ubuntu_env) pika:/media/pika/files/mine/ENV$d nlp
Going to /media/pika/files/mine/python_workspace/NLP
(ubuntu_env) pika:/media/pika/files/mine/python_workspace/NLP$python
Python 3.4.3 (default, Oct 14 2015, 20:28:29)
windows:
env > Script\activate (or Script\activate.bat)
mingw(git):
venv >source Scripts/activate
这时会发现,在命令行前面,会多出(env)出来,表示你已经进入了虚拟机了。现在你可以使用pip install xxx来安装你想要的库了。
Note: activate.bat脚本会设置控制台环境变量,使得该控制台以后调用的python命令会执行虚拟环境中的python。virtual env激活后,在任意目录输入python, ipython(如果安装了)都会调用virtual env中的命令。
退出虚拟环境
(ubuntu_env) pika:/media/pika/files/mine/ENV/ubuntu_env$deactivate
pika:/media/pika/files/mine/ENV/ubuntu_env$
Note: deactivate命令应该是在virtualenv安装目录下。
直接在该环境中使用deactivate
命令即可退出
Note: deactivate.bat是还原控制台环境变量设置
删除虚拟环境
rm -r venv
直接删除虚拟环境所在的文件夹venv就删除了我们创建的venv虚拟环境
linux下virtualenv其它命令
列出虚拟环境列表
workon
也可以使用lsvirtualenv
新建虚拟环境
mkvirtualenv [虚拟环境名称]
启动/切换虚拟环境
workon [虚拟环境名称]
删除虚拟环境
rmvirtualenv [虚拟环境名称]
虚拟环境迁移
当需要将虚拟环境env转移到同一台电脑的另一个目录下时
或者当需要将虚拟环境env1迁移或复制到另一个虚拟环境(可能不在同一台机器上)env2时,首先仍然需要在目的机器上安装pip和virtualenv,然后采用以下方法之一安装其他的package:
1.直接将env1里的文件全部复制到env2里,然后修改涉及路径的文件。此种方法可能正常使用,但显然不是好办法(不过网络不好的时候lz就是用的这个)。
修改的路径主要是虚拟环境ubuntu_env/bin目录下的文件执行程序的路径:如active, pip, ipython等等(几乎所有文件的路径,不过有的命令你不用的可以不改)。
如将虚拟环境ubuntu_env/bin/active中的路径修改一下:
其中的VIRTUAL_ENV路径其实最好修改成现在的绝对路径VIRTUAL_ENV="/media/pika/files/mine/ENV/ubuntu_env";
将虚拟环境ubuntu_env/bin/pip和pip3和pip3.4中的路径修改成绝对路径:#!/home/pipi/ENV/ubuntu_env/bin/python3
注意最好不要将路径修改成相对路径。如果修改的ipython执行路径为相对路径#!./bin/python3,是相对这个ipython.py执行的路径,激活virtual env后如果在另一个目录下输入python就会出错找不到或者直接调用系统中的python了,而不是virtual env中的python,而原始的默认路径使用绝对路径就可以在virtual env激活后在任意目录都可以执行ipython而不出错!
2. 使用requirements.txt
进入原虚拟环境env1,然后执行pip freeze > requirements.txt将包依赖信息保存在requirements.txt文件中。
最好手动调整一下顺序,比如numpy和scipy要在matplotlib前面安装;另外如果想安装最新版本的,再将后面的版本号==1.9.1什么的删除。
然后进入目的虚拟环境env2,执行pip install -r requirements.txt,pip就会自动从网上下载并安装所有包。
虚拟环境env2如果是env1的拷贝,最好先pip uninstall -ry requirements.txt,再pip install -r requirements.txt
3.pip默认会从pypi服务器(http://pypi.python.org/simple)下载包的安装文件,如果目的机器无法连外网,则可以采用以下办法:
3.1搭建自己的pypi服务器。专业的,可以使用第三方的软件包来搭建一个完整的pypi镜像服务器,参考http://www.worldhello.net/2011/03/14/2357.html。更快速的方法只需要一条命令python -m SimpleHTTPServer即可完成搭建服务器,具体的目录结构可参考原pypi服务器,简而言之,就是把安装文件打包放入目录即可。搭建好服务器之后,在目的虚拟环境中,就可以使用pip来安装了,命令如:pip install -i http://127.0.0.1:8000/ -r requirements.txt
3.2如果你实在不想搭建pypi服务器,也有办法。首先将所有包的安装文件下载下来,可以手动下载,也可以使用pip,如pip install -d /path/to/save/ -r requirements.txt,然后自己修改requirements.txt文件,将每一行改成对应的包的安装文件的路径。最后在目的虚拟环境中使用pip安装,如pip install -r requirements.txt即可。
3.3还有一种途径,就是pip提供的bundle选项。首先执行pip bundle MyEnv.pybundle -r requirements.txt,将生成一个MyEnv.pybundle文件,该文件夹包含所有包的安装文件(注意必须后缀名必须是.pybundle),默认是重新从pypi服务器下载安装文件的,如果愿意,也可以利用3.1中的方法,指定本地的pypi服务器。然后在目的虚拟环境中执行pip install MyEnv.pybundle即可
所以说,lz还是更喜欢docker中配置的python开发环境。
虚拟环境迁移出错
方法1虚拟环境迁移后包引入出错
from scipy import stats
ImportError: liblapack.so.3: cannot open shared object
这时只需要pip install scipy重新安装一下就ok了。
ImportError: libBLT.2.4.so.8.6: cannot open shared object file: No such file or directory, please install the python3-tk package
也要重新安装matplotlib
所以最好使用方法2迁移。
Virtualenv中安装python拓展包
pip安装时,使用命令pip, pip3, pip3.4都可以,因为virtualenv中安装的如果是py3则pip对应的就是pip3,在目录虚拟环境ubuntu_env/bin/存在三个命令pip和pip3和pip3.4就知道了。
同时要注意,虚拟环境中安装python拓展包需要先如上进入虚拟环境,不然就安装在系统的python路径下了。
virtualenv从requirements.txt中安装python库
进入原虚拟环境env1,然后执行pip freeze > requirements.txt将包依赖信息保存在requirements.txt文件中。然后进入目的虚拟环境env2,执行pip install -r requirements.txt,pip就会自动从网上下载并安装所有包。
requirements.txt:
numpy
pandas
virtualenv中安装numpy
通过pip install numpy安装numpy!(可能是lz的系统中已经存在numpy的非python依赖了。。。)
virtualenv中安装scipy和matplotlib
You may have to install some extra non-Python dependencies using apt-get.在安装scipy前,要先在系统中安装scipy的非python依赖,好像是fortran的。
Building Matplotlib requires libpng (and freetype, as well) which isn‘t a python library, so pipdoesn‘t handle installing it (or freetype).
sudo apt-get build-dep python-scipy
sudo apt-get -y build-dep matplotlib
(virtualenv) pip install scipy
(virtualenv) pip install matplotlib
[Install python-scipy in a virtualenv]
[How to install matplotlib using virtualenv on Ubuntu]
windows下virtualenv中安装pywin32
virtualenv中不能直接用pip install pywin32,否则会出错:Couldnot find any downloads that satisfy the requirement. pywin32 No distributions at all foundfor pywin32.
Solution1
在http://sourceforge.net/projects/pywin32/files/ 找到你要的exe文件下载地址
激活virtualenv
运行easy_install http://PATH.TO/EXE/DOWNLOAD
Note: easy_install 太老的话可能出错:error: c:\users\blah\appdata\local\temp\easy_install-ibkzv7\pywin32-214.win32-py2.6.exe is not a valid distutils Windows .exe
Solution2
如果下载不下来也可以这样
http://sourceforge.net/projects/pywin32/files/ 中下载exe文件到本地
激活virtualenv
运行easy_install DOWNLOADED_FILE.exe e.g. easy_install D:\Downloads\Programming\Python\python3\pywin32-219.win-amd64-py3.4.exe
Solution3(亲测有效)
系统中安装pywin32后,将pywin32.pth复制到virtualenv site-packages并编辑文件指定相关路径。[PyWin32 and virtualenv]
> copy D:\python3.4.2\Lib\site-packages\pywin32.pth E:\mine\python_workspace\CrawlerEnv\Lib\site-packages\pywin32.pth
查处文件内容more E:\mine\python_workspace\CrawlerEnv\Lib\site-packages\pywin32.pth‘
# .pth file for the PyWin32 extensions
win32
win32\lib
Pythonwin
将其自改为:
D:\python3.4.2\Lib\site-packages\win32
D:\python3.4.2\Lib\site-packages\win32\lib
D:\python3.4.2\Lib\site-packages\Pythonwin
这样就可以成功引入,并且可以在pycharm中使用:
[How to install win32com module in a virtualenv?]
[How to install pywin32 in virtualenv with python 2.7 64 bit?]
virtualenv中安装rsae
python版本是python3
Note: lz不知道为嘛要先重启电脑才能安装成功,否则报错could not find the version that satisfies the requirement rsa
查看virtualenv中已经安装的python包列表
(ubuntu_env) pika:/media/pika/files/mine/python_workspace/ubuntu_env$pip list
numpy (1.10.4)
pip (8.1.1)
py4j (0.9.2)
setuptools (20.3.1)
sh (1.11)
wheel (0.29.0)
(ubuntu_env) pika:/media/pika/files/mine/python_workspace/ubuntu_env$pip freeze
numpy==1.10.4
py4j==0.9.2
scipy==0.17.0
sh==1.11
Note: virtualenv中的pip应该就是pip3默认的。两种方式还是有一丁丁不同的。
pycharm项目配置虚拟环境
在pycharm中设置项目在virtualenv中运行
首先virtualenv venv创建一个虚拟环境并安装好相关运行环境
打开pycharm
下拉框中可以选择需要的运行环境
如果找不到创建的虚拟环境,可以在右边设置按钮中添加一个新的python interpreter, add local选择创建的虚拟环境venv中的python解释器(如D:\venv\Scripts\python.exe)就可以了
多个不同python版本共存
我们可以用许多方法让不同的 Python 版本在系统上共存,例如在 OS X 上,如果使用官方提供的 DMG 版本安装,那么自带的 python2 和新安装的 python3 是可以共存的。python3 可以使用 python3 来调用,甚至 pip 都可以使用 pip3 来调用。
1. 自己配置
同时安装python2和python3,然后在系统变量中修改两个的顺序就可以设置系统中优先使用哪个版本的python
如果是用anaconda安装的python2,再安装python3就必须在python3安装程序中设置不安装pip,否则安装程序会出错,无法安装成功(所以小编从来都是需要什么拓展包才安装,从不用anaconda一次安装那么多没用的东西)。安装python3成功后,再下载运行get-pip.py文件安装pip就ok了
2. pyenv
如果有很多小版本需要共存,pyenv 用来解决这类问题。它可以安装、卸载、编译、管理多个 python 版本,并随时将其中一个设置为工作环境。But pyenv 不支持 Windows 系统。[Python多版本共存之pyenv]
3. pywin
Windows 上有一个 pyenv 的替代品,是 pywin 。它用来在多个安装的 Python 版本之间进行切换(就是在windowns中已经安装了多个版本的python),也支持 MSYS/MINGW32 。
安装和使用:
pip install pywin
C:\>pywin genlaunchers
Search for python installations and create batch files in the same directory where pywin is installed.
C:\>pywin # launch first python found in PATH
C:\>pywin -2.7 # launch python 2.7
C:\>pywin setdefault 3.4
Setting default python for active session to: 3.4
C:\Python34;C:\Python34\Scripts -- now at front of PATH #相当于1中的自己配置
C:\>pywin -3.2 test.py # launch test.py with python 3.2
C:\Python32
pywin启动python版本的顺序:
Any version specified after a #! in the first 2 lines of the source. The interpreter will be invoked with any additional parameters.examples:
#! python3.3
#! /usr/bin/python2.7 -v
If the environment variable VIRTUAL_ENV is set, use that virtualenv‘s python.exe.
If the environment variable PYTHONHOME is set, use its python.exe.
If none of the above, fall back to the first python.exe found on the path.
4. Python Launcher for Windows
Python 从3.3版本开始(又是3.3?),在 Windows 系统中自带了一个 py.exe 启动工具。如果你是使用 Python.org 官网下载的安装包安装的 Python 3.3(或更新版本)环境,那么可以直接在命令提示符中使用这个工具。py 可以打开默认的 python 提示符; py -2.7 和 py -3 打开对应的 Python 版本。
另一种解决方案anaconda
下载anaconda
~/ENV$ wget http://repo.continuum.io/archive/Anaconda3-4.1.1-Linux-x86_64.sh
Python 3:
bash Anaconda3-4.1.1-Linux-x86_64.sh
运行安装时注意不要一直enter,要设置一下anaconda安装目录及是否加入用户默认.bashrc中。
这样安装的python就是用户独立的!linux下不同用户输入python都是对应自己安装的anaconda,pip也是。
from:http://blog.csdn.net/pipisorry/article/details/47008981
ref:使用VitrualEnvWrapper隔离python项目的库依赖
一种部署 Python 代码的新方法dh-virtualenv