2014-04-24 1 views
5

아마도 virtualenv의 작동 방식에 대해서는 분명하지 않지만 --always-copy 플래그로 virtualenv를 실행하면 모든 파일이 필요합니다. inside/lib/python을 복사합니다. virtualenv는 lib/python 디렉토리의 모든 .py 파일을 복사하지 않습니다

그래서 나는 모든 파일을 lib 디렉토리

cd myenv/lib/python2.7 

목록으로 이동 그런 다음 가상 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 

되어 생성

_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, 그러나 나는 (사이트 패키지 등 단지 1 수준은 제외)

하는가를 나는 200 + 얻을 파이썬 설치 디렉토리에있는 파일/DIRS을 계산하면 아무도 이유를 알고 이게 행동이야?

심지어 __future__.py도 존재하지 않습니다.

감사합니다.

+0

난 그냥 내 자신을 만났고, 나는 virtualenv에서 그런 속임수를 기대하지 않았다! –

+0

나는 python3.4.3에서 virtualenv와 같은 문제가있다. ( – roboslone

답변

2

virtualenv가 파이썬 라이브러리에 불필요한 전체 복제본을 만들 것을 기대하지 않을 것입니다.

Virtual Python은 여전히 ​​루트 Python 환경에서 라이브러리 파일을 참조하고 읽습니다. virtualenv가하는 일은 virtual env에 새 라이브러리 설치 경로를 설정하기 때문에 더 많은 라이브러리 설치가이 가상 환경에 한정됩니다.

--always-copy 

이 옵션은 virtuallink가 symlink가 아닌 필요한 파일 만 복사하도록합니다.

0

이 항상 아니라 심볼릭 링크보다 파일을 복사 수동

--always 복사 에서입니다.

이 옵션을 사용하지 않으면 virtualenv는 공간을 절약하기 위해 필요한 최소 파일 만 심볼릭 링크해야합니다. 이 옵션은 해당 파일의 사본을 보증합니다.

나머지 파일 (특히 설치 한 추가 사이트 패키지)을 복사하는 것에 대해서는 아무런 언급이 없습니다.

--always-copy를 사용해야하는 필요성은 새로운/추가 프로젝트 패키지와 비슷하지만 파이썬의 시스템 사이트 패키지를 사용할 수도 있습니다. 당신이 VIRTUALENV --system-사이트 패키지 ENV 빌드 경우

는, 가상 환경이 /usr/lib/python2.7/site에서 패키지를 상속 :이이 옵션이 있습니다

-packages (또는 사이트 패키지 디렉토리가 어디에 있든간에).

+0

--system-site-packages를 사용하면 언급 된 __future_.py가 lib 디렉토리에서 복사되지 않는다. – Matyas