Проблема настройки Virtualenv - PullRequest
6 голосов
/ 06 мая 2011

Я пытаюсь настроить virtualenv в Ubuntu 10.04 с Python 2.6.5, но возникают некоторые проблемы.

После того, как я установил оболочку virtualenv и virtualenv с pip, я запускаю команду: virtualenv mysite-env --verbose

Я получаю следующую ошибку:

Creating mysite-env/lib/python2.6
Symlinking Python bootstrap modules
  Symlinking mysite-env/lib/python2.6/lib-dynload
  Symlinking mysite-env/lib/python2.6/config
  Symlinking mysite-env/lib/python2.6/os.py
  Ignoring built-in bootstrap module: posix
  Symlinking mysite-env/lib/python2.6/posixpath.py
  Cannot import bootstrap module: nt
  Symlinking mysite-env/lib/python2.6/ntpath.py
  Symlinking mysite-env/lib/python2.6/genericpath.py
  Symlinking mysite-env/lib/python2.6/fnmatch.py
  Symlinking mysite-env/lib/python2.6/locale.py
  Symlinking mysite-env/lib/python2.6/encodings
  Symlinking mysite-env/lib/python2.6/codecs.py
  Symlinking mysite-env/lib/python2.6/stat.py
  Symlinking mysite-env/lib/python2.6/UserDict.py
  Symlinking mysite-env/lib/python2.6/lib-dynload/readline.so
  Symlinking failed, copying to mysite-env/lib/python2.6/lib-dynload/readline.so
Traceback (most recent call last):
  File "/usr/local/bin/virtualenv", line 9, in <module>
    load_entry_point('virtualenv==1.6.1', 'console_scripts', 'virtualenv')()
  File "/usr/local/lib/python2.6/dist-packages/virtualenv.py", line 795, in main
    never_download=options.never_download)
  File "/usr/local/lib/python2.6/dist-packages/virtualenv.py", line 886, in create_environment
    site_packages=site_packages, clear=clear))
  File "/usr/local/lib/python2.6/dist-packages/virtualenv.py", line 1020, in install_python
    copy_required_modules(home_dir)
  File "/usr/local/lib/python2.6/dist-packages/virtualenv.py", line 974, in copy_required_modules
    copyfile(filename, dst_filename)
  File "/usr/local/lib/python2.6/dist-packages/virtualenv.py", line 414, in copyfile
    copyfileordir(src, dest)
  File "/usr/local/lib/python2.6/dist-packages/virtualenv.py", line 391, in copyfileordir
    shutil.copy2(src, dest)
  File "/usr/lib/python2.6/shutil.py", line 99, in copy2
    copyfile(src, dst)
  File "/usr/lib/python2.6/shutil.py", line 53, in copyfile
    fdst = open(dst, 'wb')
IOError: [Errno 20] Not a directory: 'mysite-env/lib/python2.6/lib-dynload/readline.so'

Если я запускаю его снова, я получаю следующее:

Directory mysite-env/lib/python2.6 already exists
    Symlinking Python bootstrap modules
      Ignoring built-in bootstrap module: posix
      Cannot import bootstrap module: nt
      Symlinking mysite-env/lib/python2.6/lib-dynload/readline.so
      Symlinking mysite-env/lib/python2.6/copy_reg.py
      Symlinking mysite-env/lib/python2.6/types.py
      Symlinking mysite-env/lib/python2.6/re.py
      Symlinking mysite-env/lib/python2.6/sre.py
      Symlinking mysite-env/lib/python2.6/sre_parse.py
      Symlinking mysite-env/lib/python2.6/sre_constants.py
      Symlinking mysite-env/lib/python2.6/sre_compile.py
      Ignoring built-in bootstrap module: zlib
      Symlinking mysite-env/lib/python2.6/warnings.py
      Symlinking mysite-env/lib/python2.6/linecache.py
      Symlinking mysite-env/lib/python2.6/_abcoll.py
      Symlinking mysite-env/lib/python2.6/abc.py
    Creating mysite-env/lib/python2.6/site-packages
    Writing mysite-env/lib/python2.6/site.py
    Writing mysite-env/lib/python2.6/orig-prefix.txt
    Creating parent directories for mysite-env/include
    Symlinking mysite-env/include/python2.6
    Creating mysite-env/bin
    New python executable in mysite-env/bin/python
    Changed mode of mysite-env/bin/python to 0755
    Testing executable with mysite-env/bin/python -c "import sys; print(sys.prefix)"
    ERROR: The executable mysite-env/bin/python is not functioning
    ERROR: It thinks sys.prefix is u'/usr' (should be '/vagrant/mysite-env')
    ERROR: virtualenv is not compatible with this system or executable

Есть идеи, как это исправить? Спасибо!

Ответы [ 4 ]

5 голосов
/ 02 апреля 2013

Похоже, это было немного, так как вы спросили это. Файловый драйвер Virtualbox для каталога / vagrant не может распознавать символические ссылки, которые часто использует virtualenv.

Это лучше всего продемонстрировать с помощью простого

mybox:/vagrant$ ln -s ~/.bashrc
ln: failed to create symbolic link ./.bashrc': Protocol error`

Обновление:

Из-за несовместимости бродяги с символическими ссылками и virtualenv мои бродячие блоки / экземпляры были специфичны для задачи / проекта (только 1 virtualenv). Поэтому в папке vagrant host side / instance я бы оставил короткий скрипт для установки python & virtualenv, а затем сделал бы

pip install -r /vagrant/requirement

Дополнительную документацию можно найти здесь. https://docs.vagrantup.com/v2/provisioning/basic_usage.html

с соответствующими проверками bash if (существует ли python, существует ли / home / vagrant / env), вы можете подготовить свой ящик один раз, а затем добавить вызов для активации установки ~ / env, чтобы при входе в систему, Вы уже настроены и готовы к работе.

2 голосов
/ 09 сентября 2011

Эта ошибка возникает из-за того, что используемый вами файл virtualenv.py несовместим с используемой версией Python. Для python2.7 вам нужно скачать двоичные файлы с сайта virtualenv.org, а затем скомпилировать их, используя

python setup.py install

после установки используйте установленный двоичный файл (не файл virtualenv.py) для создания виртуальной среды с помощью

virtualenv --no-site-packages <path to virtual env directory>/env/
1 голос
/ 06 мая 2014

На этот вопрос уже есть несколько ответов, но я хочу поделиться своим решением, если оно поможет следующему человеку.

Где я запускаю команду, имеет значение. Я выполнял команду virtualenv env в общей папке / vagrant. Это была моя ошибка. Когда я возвращаюсь к своему домашнему каталогу, а затем запускаю virtualenv env, все работает нормально.

0 голосов
/ 06 мая 2011

Я не сталкивался с этой конкретной проблемой, но я лично переключился с использования virtualenv на pythonbrew. pythonbrew - это другое решение той же проблемы; он работает больше как rvm в сообществе Ruby: он строит полностью автономные версии Python с нуля под $HOME/.pythonbrew; затем он предоставляет функции оболочки, которые позволяют легко переключаться с одного на другое (редактирование пути для вас и т. д.). Он не такой легкий, как virtualenv, но он также не поддерживает систему Python, поэтому проблема с символьными ссылками исчезнет. Вы также можете установить несколько версий Python, даже если они не установлены в базовой системе.

Ваш пробег, конечно, может отличаться, но pythonbrew работал хорошо для меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...