2013-04-29 195 views
7

我在win7下的cygwin上使用virtualenv 1.9.1。每个virtualenv都创建时没有任何选项(显然不是目录名称)。没有华丽的定制。virtualenv不会创建PYTHONPATH/pip安装的包不起作用

所有的virtualenvs都是新鲜的,因为我没有创建任何包装脚本,也没有编辑任何virtualenv脚本。我完全肯定我没有做任何特别的事情(即,除了滥用virtualenv,而不是采取妨碍其操作的行动),这导致PYTHONPATH在多个虚拟世界中缺席。

对于每个新的virtualenv,virtualenv激活脚本不会创建PYTHONPATH。 pip在$VIRTUAL_ENV/lib/python2.7/site-packages/<packagedir>下安装软件包(例如lib/python2.7/site-packages/html5lib)。

pip的行为似乎是可取的。 但是,运行python(激活virtualenv后)不会导致可装载pip的软件包(即“no module named ...”)。

更新:将一个PYTHONPATH添加到activate确实“解决”了问题。显然,我不想手动维护这个,也不必更新activate_this.py。我仍然想知道为什么virtualenvs现在不能直接使用。

解决方案是什么? virtualenv从来没有用过这样做。现在有什么问题?

更新2:这里是-vv运行的virtualenv的输出:

$ virtualenv -vv newvirtualenv 
Creating newvirtualenv/lib/python2.7 
Symlinking Python bootstrap modules 
    Symlinking newvirtualenv/lib/python2.7/config 
    Symlinking newvirtualenv/lib/python2.7/lib-dynload 
    Symlinking newvirtualenv/lib/python2.7/os.py 
    Ignoring built-in bootstrap module: posix 
    Symlinking newvirtualenv/lib/python2.7/posixpath.py 
    Cannot import bootstrap module: nt 
    Symlinking newvirtualenv/lib/python2.7/ntpath.py 
    Symlinking newvirtualenv/lib/python2.7/genericpath.py 
    Symlinking newvirtualenv/lib/python2.7/fnmatch.py 
    Symlinking newvirtualenv/lib/python2.7/locale.py 
    Symlinking newvirtualenv/lib/python2.7/encodings 
    Symlinking newvirtualenv/lib/python2.7/codecs.py 
    Symlinking newvirtualenv/lib/python2.7/stat.py 
    Symlinking newvirtualenv/lib/python2.7/UserDict.py 
    File newvirtualenv/lib/python2.7/lib-dynload/readline.dll already exists 
    Symlinking newvirtualenv/lib/python2.7/copy_reg.py 
    Symlinking newvirtualenv/lib/python2.7/types.py 
    Symlinking newvirtualenv/lib/python2.7/re.py 
    Symlinking newvirtualenv/lib/python2.7/sre.py 
    Symlinking newvirtualenv/lib/python2.7/sre_parse.py 
    Symlinking newvirtualenv/lib/python2.7/sre_constants.py 
    Symlinking newvirtualenv/lib/python2.7/sre_compile.py 
    File newvirtualenv/lib/python2.7/lib-dynload/zlib.dll already exists 
    Symlinking newvirtualenv/lib/python2.7/warnings.py 
    Symlinking newvirtualenv/lib/python2.7/linecache.py 
    Symlinking newvirtualenv/lib/python2.7/_abcoll.py 
    Symlinking newvirtualenv/lib/python2.7/abc.py 
    Symlinking newvirtualenv/lib/python2.7/_weakrefset.py 
Creating newvirtualenv/lib/python2.7/site-packages 
Writing newvirtualenv/lib/python2.7/site.py 
Writing newvirtualenv/lib/python2.7/orig-prefix.txt 
Writing newvirtualenv/lib/python2.7/no-global-site-packages.txt 
Creating parent directories for newvirtualenv/include 
Symlinking newvirtualenv/include/python2.7 
Creating newvirtualenv/bin 
New python executable in newvirtualenv/bin/python2.7 
Changed mode of newvirtualenv/bin/python2.7 to 0755 
Also creating executable in newvirtualenv/bin/python 
Changed mode of newvirtualenv/bin/python to 0755 
Testing executable with newvirtualenv/bin/python2.7 -c "import sys;out=sys.stdout;getattr(out, "buffer", out).write(sys.prefix.encode("utf-8"))" 
Got sys.prefix result: u'/cygdrive/c/Users/marcin/Documents/codeprojects/newvirtualenv' 
Creating newvirtualenv/lib/python2.7/distutils 
Writing newvirtualenv/lib/python2.7/distutils/__init__.py 
Writing newvirtualenv/lib/python2.7/distutils/distutils.cfg 
Using existing setuptools egg: /usr/lib/python2.7/site-packages/virtualenv_support/setuptools-0.6c11-py2.7.egg 
Installing setuptools... 
    Running command /cygdrive/c/Users/ma...ualenv/bin/python2.7 -c "#!python 
\"\"\"Bootstra...sys.argv[1:]) 






" -v /usr/lib/python2.7/s...ols-0.6c11-py2.7.egg 
    Processing setuptools-0.6c11-py2.7.egg 
    Copying setuptools-0.6c11-py2.7.egg to /cygdrive/c/Users/marcin/Documents/codeprojects/newvirtualenv/lib/python2.7/site-packages 
    Adding setuptools 0.6c11 to easy-install.pth file 
    Saving /cygdrive/c/Users/marcin/Documents/codeprojects/newvirtualenv/lib/python2.7/site-packages/easy-install.pth 
    Installing easy_install script to /cygdrive/c/Users/marcin/Documents/codeprojects/newvirtualenv/bin 
    changing mode of /cygdrive/c/Users/marcin/Documents/codeprojects/newvirtualenv/bin/easy_install to 755 
    Installing easy_install-2.7 script to /cygdrive/c/Users/marcin/Documents/codeprojects/newvirtualenv/bin 
    changing mode of /cygdrive/c/Users/marcin/Documents/codeprojects/newvirtualenv/bin/easy_install-2.7 to 755 

    Installed /cygdrive/c/Users/marcin/Documents/codeprojects/newvirtualenv/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg 
    Processing dependencies for setuptools==0.6c11 
    Finished processing dependencies for setuptools==0.6c11 
...Installing setuptools...done. 
Installing existing pip-1.3.1.tar.gz distribution: /usr/lib/python2.7/site-packages/virtualenv_support/pip-1.3.1.tar.gz 
Installing pip... 
    Running command /cygdrive/c/Users/ma...ualenv/bin/python2.7 -x /cygdrive/c/Users/ma...env/bin/easy_install /usr/lib/python2.7/s...ort/pip-1.3.1.tar.gz 
    Processing pip-1.3.1.tar.gz 
    Running pip-1.3.1/setup.py -q bdist_egg --dist-dir /tmp/easy_install-ZP_VIv/pip-1.3.1/egg-dist-tmp-H3XBh_ 
    warning: no files found matching '*.html' under directory 'docs' 
    warning: no previously-included files matching '*.txt' found under directory 'docs/_build' 
    no previously-included directories found matching 'docs/_build/_sources' 
    Adding pip 1.3.1 to easy-install.pth file 
    Installing pip script to /cygdrive/c/Users/marcin/Documents/codeprojects/newvirtualenv/bin 
    Installing pip-2.7 script to /cygdrive/c/Users/marcin/Documents/codeprojects/newvirtualenv/bin 

    Installed /cygdrive/c/Users/marcin/Documents/codeprojects/newvirtualenv/lib/python2.7/site-packages/pip-1.3.1-py2.7.egg 
    Processing dependencies for pip==1.3.1 
    Finished processing dependencies for pip==1.3.1 
...Installing pip...done. 
Writing newvirtualenv/bin/activate 
Writing newvirtualenv/bin/activate.fish 
Writing newvirtualenv/bin/activate_this.py 
Writing newvirtualenv/bin/activate.csh 
+0

丑陋的解决方案:可能破解'activate'脚本并手动添加路径? – 2013-04-29 19:32:11

+0

@JakubM。这发生在我身上,但是这似乎是我没有做其他明显的事情,或者是当前版本的virtualenv中的错误。 – Marcin 2013-04-29 19:33:40

+0

'PYTHONPATH'是一个红色的鲱鱼。它不是由'activate'设置的**。它从来没有。 'bin/python.exe'中的python可执行文件负责设置'PYTHONHOME'(内部)。你可以运行'virtualenv -vv'(所以有两个'-v'选项)并在你的问题中向我们显示这个调试输出来帮助我们调试问题? – 2013-05-02 09:27:33

回答

1

我在Win7上运行cygwin的Python。我已使用this安装easy_install。然后点,然后virtualenv。然后跑virtualenv newve,然后source newve/bin/activate,然后pip安装了一个包(IPython)。一切正常。我可以从Python REPL导入,程序可以工作,并且路径设置正确。 PYTHONPATH从未设置在任何地方。我很茫然。

尝试重新安装所有东西?

编辑:

实测出的easy_install是在cygwin包python-setuptools可用。

+0

当我重新安装时,我实际上使用的是直接从pypi下载的版本,而不是python-setuptools。我不知道这是不是罪魁祸首。 – Marcin 2013-05-02 18:07:56

0

我能想到的唯一的事情就是PYTHONPATH已设置。由于Cygwin继承了所有Windows的环境变量,因此如果已经设置了PYTHONPATH,virtualenv将使用它而不是正确的目录。检查Windows下是否已设置PYTHONPATH。如果是,请删除它并再次尝试virtualenv。同时检查你的.bashrc文件,看看是否设置了PYTHONPATH。为什么你不能使用Windows的普通Python?你在写一个POSIX脚本吗?

+0

要清楚:PYTHONPATH不存在。它不是在环境中设置的。我使用的是cygwin,因为我更喜欢使用cygwin作为开发环境。 – Marcin 2013-05-02 13:22:51

+0

@Marcin:嗯......奇怪。你可以尝试看看它在Windows中是否可以正常工作?如果是这样,那么我们知道这是Cygwin或Cygwin的Python中的问题。如果没有,那么我完全无能为力。如果一切都失败,你总是可以使用'sys.path.append'。 – refi64 2013-05-02 19:19:53

+0

我正在使用Windows。 Cygwin是windows。 – Marcin 2013-05-02 19:30:32