2013-04-29 2 views
7

Я использую virtualenv 1.9.1 на cygwin под win 7. Каждый virtualenv создается без каких-либо параметров (кроме имени каталога, очевидно). Нет никаких причудливых настроек.virtualenv не создает пакеты PYTHONPATH/pip, которые не работают

Все virtualenvs свежие, в том смысле, что я не создал никаких сценариев-оболочек и не редактировал ни один из скриптов virtualenv. Я абсолютно уверен, что я не делаю ничего особенного (т. Е. Не злоупотребляю virtualenv, а не предпринимаю действия, которые расстраивают его работу), что заставляет PYTHONPATH отсутствовать в нескольких virtualenvs.

Виртуальный скрипт активации для каждого нового virtualenv не создает PYTHONPATH. pip устанавливает пакеты под номером $VIRTUAL_ENV/lib/python2.7/site-packages/<packagedir> (например, lib/python2.7/site-packages/html5lib).

Поведение ПП кажется желательным. Тем не менее, запуск python (после активации virtualenv) приводит к тому, что пакеты с установленными пакетами не загружаются (т. Е. «No module named ...»).

Обновление: добавление PYTHONPATH в activate действительно «решает» проблему. Очевидно, я не хочу вручную поддерживать это, а также не должен обновлять activate_this.py. Я все равно хотел бы знать, почему virtualenvs теперь не работают прямо из коробки.

Какое решение? virtualenv никогда не делал этого. Что с этим не так?

Update 2: Вот выход работает virtualenv с -vv:

$ 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

Уродливое решение: возможно, взломать скрипт 'активировать' и добавить путь туда вручную? –

+0

@JakubM. Это произошло со мной, но это похоже либо на то, что я не делаю ничего более очевидного, или на ошибку в текущей версии virtualenv. – Marcin

+0

'PYTHONPATH' - это красная сельдь. ** не устанавливается ** с помощью 'activate'. Это никогда не бывает. Исполняемый файл python в 'bin/python.exe' отвечает за установку' PYTHONHOME' (внутренне). Можете ли вы запустить 'virtualenv -vv' (так что два параметра' -v') и показать нам этот вывод отладки в вашем вопросе, чтобы помочь нам отладить проблему? –

ответ

1

Я нахожусь на Win7, запустив python cygwin. Я установил easy_install с this. Затем pip, затем virtualenv. Затем запустили virtualenv newve, затем source newve/bin/activate, затем pip установил пакет (IPython). Все работает нормально. Я могу импортировать из python REPL, и программа работает, и пути установлены правильно. И PYTHONPATH никогда не устанавливается нигде. Я в недоумении.

Попробуйте переустановить все?

Edit:

Обнаруженные easy_install доступен в Cygwin пакет python-setuptools.

+0

Я действительно использовал версию, загруженную напрямую из pypi вместо python-setuptools, когда я переустановил. Я не знаю, является ли это виновником или нет. – Marcin

0

Единственное, что я могу думать о том, что PYTHONPATH уже установлен. Поскольку Cygwin наследует все переменные среды Windows, если PYTHONPATH уже установлен, virtualenv будет использовать это вместо правильной директории. Проверьте, не установлено ли в Windows PYTHONPATH. Если это так, удалите его и снова попробуйте virtualenv. Также проверьте файл .bashrc, чтобы узнать, установлен ли PYTHONPATH. Почему вы не можете использовать обычный Python для Windows? Вы пишете сценарий POSIX?

+0

Чтобы быть ясным: PYTHONPATH отсутствует. Он не установлен в среде. Я использую cygwin, потому что предпочитаю использовать cygwin в качестве среды разработки. – Marcin

+0

@ Марцин: Хм ... странно. Можете ли вы попытаться выяснить, будет ли это вообще работать в Windows? Если это так, то мы знаем, что это проблема в Cygwin или Cygwin's Python. Если нет, то я совершенно не знаю. Вы всегда можете использовать 'sys.path.append', если все остальное терпит неудачу. – refi64

+0

Я использую окна. Cygwin - это окна. – Marcin

Смежные вопросы