2014-04-24 55 views
5

也许我并不清楚virtualenv是如何工作的,但是如果我用--always-copy标志运行virtualenv,我期望所有文件内部/ lib/python被复制。virtualenv不会复制lib/python目录中的所有.py文件

所以我创建了一个虚拟的ENV

virtualenv -v --always-copy myenv 

输出的是

Creating myenv/lib/python2.7 
Symlinking Python bootstrap modules 
    Copying to myenv/lib/python2.7/config 
    Copying to myenv/lib/python2.7/lib-dynload 
    Copying to myenv/lib/python2.7/os.py 
    Ignoring built-in bootstrap module: posix 
    Copying to myenv/lib/python2.7/posixpath.py 
    Cannot import bootstrap module: nt 
    Copying to myenv/lib/python2.7/ntpath.py 
    Copying to myenv/lib/python2.7/genericpath.py 
    Copying to myenv/lib/python2.7/fnmatch.py 
    Copying to myenv/lib/python2.7/locale.py 
    Copying to myenv/lib/python2.7/encodings 
    Copying to myenv/lib/python2.7/codecs.py 
    Copying to myenv/lib/python2.7/stat.py 
    Copying to myenv/lib/python2.7/UserDict.py 
    File myenv/lib/python2.7/lib-dynload/readline.so already exists 
    Copying to myenv/lib/python2.7/copy_reg.py 
    Copying to myenv/lib/python2.7/types.py 
    Copying to myenv/lib/python2.7/re.py 
    Copying to myenv/lib/python2.7/sre.py 
    Copying to myenv/lib/python2.7/sre_parse.py 
    Copying to myenv/lib/python2.7/sre_constants.py 
    Copying to myenv/lib/python2.7/sre_compile.py 
    File myenv/lib/python2.7/lib-dynload/zlib.so already exists 
    Copying to myenv/lib/python2.7/warnings.py 
    Copying to myenv/lib/python2.7/linecache.py 
    Copying to myenv/lib/python2.7/_abcoll.py 
    Copying to myenv/lib/python2.7/abc.py 
    Copying to myenv/lib/python2.7/_weakrefset.py 
Creating myenv/lib/python2.7/site-packages 
Writing myenv/lib/python2.7/site.py 
Writing myenv/lib/python2.7/orig-prefix.txt 
Writing myenv/lib/python2.7/no-global-site-packages.txt 
Creating parent directories for myenv/include 
Copying to myenv/include/python2.7 
Creating myenv/bin 
New python executable in myenv/bin/python 
Changed mode of myenv/bin/python to 0755 
Copying to myenv/bin/python2 
Copying to myenv/bin/python2.7 
Testing executable with myenv/bin/python -c "import sys;out=sys.stdout;getattr(out, "buffer", out).write(sys.prefix.encode("utf-8"))" 
Got sys.prefix result: u'/home/rbouza/myenv' 
Creating myenv/lib/python2.7/distutils 
Writing myenv/lib/python2.7/distutils/__init__.py 
Writing myenv/lib/python2.7/distutils/distutils.cfg 
Installing setuptools, pip... 
    Running command /home/rbouza/myenv/bin/python -c "import sys, pip; sys...d\"] + sys.argv[1:]))" setuptools pip 
    Ignoring indexes: https://pypi.python.org/simple/ 
    Downloading/unpacking setuptools 
    Downloading/unpacking pip 
    Installing collected packages: setuptools, pip 
    Successfully installed setuptools pip 
    Cleaning up... 
...Installing setuptools, pip...done. 
Writing myenv/bin/activate 
Writing myenv/bin/activate.fish 
Writing myenv/bin/activate_this.py 
Writing myenv/bin/activate.csh 

然后我去到lib目录

cd myenv/lib/python2.7 

列表中的所有文件

_abcoll.py config  fnmatch.pyc  locale.py     os.pyc  
    site.py   sre_parse.py types.pyc  _weakrefset.pyc 
_abcoll.pyc copy_reg.py genericpath.py locale.pyc     posixpath.py site.pyc   sre_parse.pyc UserDict.py 
abc.py  copy_reg.pyc genericpath.pyc no-global-site-packages.txt posixpath.pyc sre_compile.py  sre.py   UserDict.pyc 
abc.pyc  distutils  lib-dynload  ntpath.py     re.py   sre_compile.pyc stat.py  warnings.py 
codecs.py encodings  linecache.py  orig-prefix.txt    re.pyc   sre_constants.py stat.pyc  warnings.pyc 
codecs.pyc fnmatch.py linecache.pyc os.py      site-packages sre_constants.pyc types.py  _weakrefset.py 

这正是:50,包括目录,但后来当我数在Python安装目录,我得到200 +的文件/文件显示目录(只有1级,不计站点包等)

有谁知道这是为什么这是行为吗?

甚至没有__future__.py在那里。

谢谢。

+0

我只是碰到了这个自己,我没有想到virtualenv这样的诡计! –

+0

我有和python3.4.3的virtualenv相同的问题:( – roboslone

回答

2

你不会指望virtualenv为你的python库做不必要的完全重复。

您的虚拟Python仍然引用并读取您的根Python环境中的库文件。虚拟环境的功能是在虚拟环境中设置新的库安装路径,这样进一步的库安装将被限制在这个虚拟环境中。

--always-copy 

此选项仅使virtualenv复制必要的文件而不是符号链接。

0

这是从手动

--always拷贝 始终复制文件,而不是符号链接。

的一点是,通常没有这个选项的virtualenv应该只是符号链接所需的最低文件以节省空间。然后该选项确保这些文件的副本。

它没有说任何关于复制其余文件(特别是你安装的额外网站软件包)。

您需要使用--always-copy看起来像是您的新/额外项目软件包的一部分,您可能还想使用Python的系统站点软件包。

有这个选项为:

如果您构建具有的virtualenv --system-site-packages中ENV,你的虚拟环境 将从 /usr/lib/python2.7/site继承包(或全球 site-packages目录)。

+0

我发现使用--system-site-packages不会复制lib目录中提到的__future_.py。 – Matyas

相关问题