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
patrickstar
V2EX  ›  Python

virtualenv 创建的虚拟环境咋个不是完全独立的呢

  •  
  •   patrickstar · 2016-03-20 22:36:29 +08:00 · 5194 次点击
    这是一个创建于 3168 天前的主题,其中的信息可能已经有所发展或是发生改变。
    创建完虚拟环境并在其下通过 pip 安装包时说我权限不够,一看虚拟环境下的部分目录和文件都是系统环境下的目录或文件的软链接啊,这不安装到虚拟环境的东西实际上也进入了系统环境中取了吗

    $ virtualenv --no-site-packages py34env
    发现 py34env/include/python3.4m -> /usr/include/python3.4m ,虚拟环境的 include 目录竟然是 /usr/include/python3.4m 的软链接,而且 py34env/lib 目录下很多子目录也是这种情况

    加与不加 --no-site-packages 选项结果都一样,我哪儿没搞对啊
    17 条回复    2016-03-22 18:39:04 +08:00
    4641585
        1
    4641585  
       2016-03-20 22:46:51 +08:00
    为什么不用 pyvenv 呢?
    wellsc
        2
    wellsc  
       2016-03-20 23:22:26 +08:00 via Android
    @4641585 为什么用 pyenv 呢?
    BOYPT
        3
    BOYPT  
       2016-03-20 23:25:07 +08:00
    include 目录只应该有 python 本身的.h 文件,不应该被安装进去任何文件。
    66450146
        4
    66450146  
       2016-03-21 00:29:36 +08:00
    创建完以后 activate 了吗?
    Owenjia
        5
    Owenjia  
       2016-03-21 00:33:15 +08:00 via Android
    看下 python -c "import sys; print(sys.path)" 的输出?
    既然用 3.4 了为什么不试试自带的 pyvenv ?
    Owenjia
        6
    Owenjia  
       2016-03-21 00:36:32 +08:00 via Android
    @wellsc pyvenv != pyenv
    wellsc
        7
    wellsc  
       2016-03-21 00:38:34 +08:00 via Android
    @Owenjia 我知道写错了,但是为什么要用 pyvenv ?
    shyling
        8
    shyling  
       2016-03-21 06:56:05 +08:00 via iPad
    你要先先激活啊。。
    patrickstar
        9
    patrickstar  
    OP
       2016-03-21 07:39:57 +08:00
    看来推荐使用 pyvenv 啊,这货还没了解过呢,先看看,我只是对 virtualenv 建立的虚拟环境觉得难以理解,为啥子虚拟环境下的 py34env/include/python3.4m 目录是系统环境目录 /usr/include/python3.4m 的软链接,这咋个能不影响系统环境的 python 呢

    @66450146
    @shyling 使用虚拟环境前才激活啊,我刚刚创建完虚拟环境发现虚拟环境下 include/python3.4m 目录就是个系统环境 /usr/include/python3.4m 目录的软链接,明显感觉 virtualenv 建立虚拟环境偷了懒
    patrickstar
        10
    patrickstar  
    OP
       2016-03-21 07:55:22 +08:00
    查阅了一下子 virtualenv 手册,可能需要增加一个选项:

    --always-copy
    Always copy files rather than symlinking.

    即:$ virtualenv --always-copy py34env
    patrickstar
        11
    patrickstar  
    OP
       2016-03-21 08:19:38 +08:00
    查阅了一下子 pyenv 和 virtualenv 的差异,觉得目前 virtualenv 更符合我的要求一些,我只想建立一个纯净的 python 开发测试环境,而且建立好后准备把整个虚拟环境目录拷贝到其他机器(包括 windows 和 linux )上直接使用;
    pyenv 好像是一个针对 bash 的扩展,我实际上根本就不使用 python 2.x ,只是 linux 系统缺省的是 2.x ,否则我会把它干掉了,而且也还不知道 pyenv 在 windows 能不能使用!
    wingyiu
        12
    wingyiu  
       2016-03-21 11:16:09 +08:00
    virtualenv 创建的环境只是用来隔离 site-package 的,格式 python 自带库没有意义。所以用软连接。
    shyling
        13
    shyling  
       2016-03-21 13:42:49 +08:00
    @patrickstar 因为可以复用啊=-=想直接复制有--always-copy
    Mithrandir
        14
    Mithrandir  
       2016-03-21 14:39:07 +08:00   ❤️ 1
    @patrickstar 是 pyvenv 不是 pyenv
    附上 pyvenv 文档: https://docs.python.org/3/library/venv.html
    patrickstar
        15
    patrickstar  
    OP
       2016-03-21 15:12:34 +08:00
    @Mithrandir 哦,看来我把它搞成 pyenv 了,这名字取得太容易搞错了
    66450146
        16
    66450146  
       2016-03-21 17:13:11 +08:00   ❤️ 1
    @patrickstar python 本身是软链接没问题啊,这玩意只是给你一个单独的地方安 site-package 而已

    如果你要复制的话可以加 --always-copy 参数,不过就算这样你也不能复制到 Windows 用啊……
    fzinfz
        17
    fzinfz  
       2016-03-22 18:39:04 +08:00
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   965 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 21:37 · PVG 05:37 · LAX 13:37 · JFK 16:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.