V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
arbipher
V2EX  ›  Python

怎么理解和正确使用 virtualenv/pyenv/pyvenv

  •  
  •   arbipher · 2014-11-10 14:19:09 +08:00 · 16537 次点击
    这是一个创建于 3667 天前的主题,其中的信息可能已经有所发展或是发生改变。
    虽然一直用virtualenv,但并不是很确切地知道它做了什么。

    [pyenv的doc](https://github.com/yyuu/pyenv)说它主要在PATH上做文章,也就是说它不负责包的分离?

    如果我用了pyenv来管理不同的python的版本,还是需要virtualenv来管理不同项目的包,那何必多此一举,只用virtualenv就够了啊?

    [pyvenv](https://docs.python.org/3/library/venv.html)是标准库提供的工具,它和virtualenv做的是一样的事情吗?目的是为了取代virtualenv?
    13 条回复    2016-09-22 22:02:38 +08:00
    julyclyde
        1
    julyclyde  
       2014-11-10 14:55:37 +08:00   ❤️ 1
    virtualenv是利用了“python启动时,首先以python可执行文件的路径为基准,尝试搜索标准库”的这个行为,做的一个包装性质的东西,把{python可执行文件,标准库,库安装工具}这个最小集合放在一个目录树下面,而libpython是用系统级的,以节省空间
    arbipher
        2
    arbipher  
    OP
       2014-11-10 15:14:17 +08:00
    @julyclyde
    > virtualenv的{python可执行文件,标准库,库安装工具}
    “库安装工具”指的是pip吗?

    > 而libpython是用系统级的,以节省空间
    标准库还是其他库?
    ophunter
        3
    ophunter  
       2014-11-10 15:28:31 +08:00
    关注
    julyclyde
        4
    julyclyde  
       2014-11-10 15:38:49 +08:00
    @arbipher 是指pip;libpython是python的语言解析执行功能所在的库,是个so,python可执行文件动态链接了libpython
    arbipher
        5
    arbipher  
    OP
       2014-11-10 15:53:08 +08:00
    @julyclyde
    > libpython是python的语言解析执行功能所在的库
    “以python可执行文件的路径为基准,尝试搜索标准库”
    “python可执行文件动态链接了libpython”

    这两者的关系是什么。。。我糊涂了。。。
    andrewpsy
        6
    andrewpsy  
       2014-11-10 16:21:41 +08:00
    楼主,先把你每次都source的activate文件看了,我也是最近刚开始学。
    dagger
        7
    dagger  
       2014-11-10 16:37:33 +08:00   ❤️ 1
    pyenv管理与系统环境隔离的python解释器版本,比如2.7.8、3.4.2
    virtualenv管理与系统环境隔离的包安装,比如可以在x_venv里安装a包的1.0版,在y_venv里安装a包的1.1版,两者互不影响,也不影响系统环境中的安装包
    pyenv包含有virtualenv,可以选择生成的venv是基于哪个解释器环境的
    如果只是单独安装virtualenv,不安装pyenv,那么生成的venv就是基于系统环境解释器的了
    arbipher
        8
    arbipher  
    OP
       2014-11-10 17:12:37 +08:00
    @andrewpsy
    我装了virtualenvwrapper。。。

    @dagger
    > 如果只是单独安装virtualenv,不安装pyenv,那么生成的venv就是基于系统环境解释器的了
    virtualenv也可以配置python解释器的,新建环境的时候-p path/to/version/python
    dagger
        9
    dagger  
       2014-11-10 18:29:20 +08:00
    @arbipher
    是的,但是太麻烦了,pyenv就是省得自己去编译去指定解释器,其它的应该没什么太大区别
    julyclyde
        10
    julyclyde  
       2014-11-11 16:21:58 +08:00   ❤️ 1
    libpython就是python语言本身
    而/some/path/python 只是个启动程序而已
    arbipher
        11
    arbipher  
    OP
       2014-11-12 11:34:15 +08:00
    @andrewpsy
    https://virtualenv.pypa.io/en/latest/virtualenv.html#activate-script

    This will change your $PATH so its first entry is the virtualenv’s bin/ directory. (You have to use source because it changes your shell environment in-place.) This is all it does; it’s purely a convenience. If you directly run a script or the python interpreter from the virtualenv’s bin/ directory (e.g. path/to/env/bin/pip or /path/to/env/bin/python script.py) there’s no need for activation.

    activate只是改了PATH。
    arrowna
        12
    arrowna  
       2016-06-04 23:33:34 +08:00
    windows 下安装不了 pywin 。。。
    hyyou2010
        13
    hyyou2010  
       2016-09-22 22:02:38 +08:00
    http://masnun.com/2016/04/10/python-pyenv-pyvenv-virtualenv-whats-the-difference.html

    pyenv
    在系统中安装多个版本的 python 解释器本身

    pyvenv
    系统自带
    创建一个虚拟环境,用来分隔依赖性( dependencies ),比如有的项目需要 django1.5 ,有的需要 2.0
    依然使用系统的解释器及其版本

    virtualenv
    同 pyvenv ,区别在于:
    第三方,需安装
    支持 2.6~3.5 版本
    似乎有点不兼容的小问题
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   930 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 21:16 · PVG 05:16 · LAX 13:16 · JFK 16:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.