2014-04-24 7 views
5

Vielleicht bin ich mir nicht sicher, wie virtualenv funktioniert, aber wenn ich virtualenv mit dem --always-copy-Flag starte, erwarte ich alle Dateien inside/lib/python kopiert werden.virtualenv kopiert nicht alle .py-Dateien aus dem lib/python-Verzeichnis

So erstelle ich eine virtuelle env

virtualenv -v --always-copy myenv 

Ausgabe, dass

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 

wird Dann gehe ich in das lib Verzeichnis

cd myenv/lib/python2.7 

Liste aller Dateien

_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 

was genau das ist: 50 einschließlich Verzeichnisse, aber dann, wenn ich die Dateien/Verzeichnisse in der Python-Installationsverzeichnis I 200+ (nur 1-Ebene, nicht orts Pakete zu zählen, etc.) erhalten zählen

Hat jemand weiß, warum ist das das Verhalten?

Nicht einmal ist da.

Vielen Dank.

+0

Ich bin gerade in das selbst gerannt, ich habe solche Tricks von virtualenv nicht erwartet! –

+0

Ich habe das gleiche Problem mit virtualenv von python3.4.3 :( – roboslone

Antwort

2

Sie würden nicht erwarten, dass virtualenv unnötige vollständige Duplikate für Ihre Python-Bibliotheken machen.

Ihr virtuelles Python verweist und liest Bibliotheksdateien immer noch aus Ihrer Python-Stammumgebung. Was virtualenv tut, ist, dass es Ihren neuen Bibliotheksinstallationspfad im virtuellen env einstellt, so dass die weitere Bibliotheksinstallation in diesem virtuellen env eingeschränkt wird.

--always-copy 

Diese Option bewirkt nur, dass virtualenv notwendige Dateien anstelle von Symlink kopiert. Diese

0

ist aus dem Handbuch

--always-Kopie Dateien immer kopieren, anstatt SymLink.

Der Punkt ist, dass virtualenv normalerweise ohne diese Option nur die minimal erforderlichen Dateien symbolisieren sollte, um Platz zu sparen. Diese Option sichert dann eine Kopie dieser Dateien.

Es sagt nichts über das Kopieren des Rests der Dateien (besonders der zusätzlichen Aufstellungsortpakete, die Sie installierten).

Ihr Bedarf an --always-copy sieht aus wie neben Ihren neuen/zusätzlichen Projektpaketen Sie möchten vielleicht auch die Python-System-Site-Pakete verwenden.

Es diese Option für das heißt:

Wenn Sie bauen mit virtualenv --system-site-packages ENV, Ihre virtuelle Umgebung Pakete von /usr/lib/python2.7/site erben -Pakete (oder wo auch immer Ihr globales Site-Packages-Verzeichnis ist).

+0

Ich finde, dass die Verwendung von - System-Site-Pakete nicht kopiert die erwähnte __future_.py aus dem lib-Verzeichnis. – Matyas