Как мне обойти эту проблему, создавая среду virtualenv с пользовательской сборкой Python? - PullRequest
6 голосов
/ 17 февраля 2010

Мне нужно запустить некоторый код на машине Linux с Python 2.3.4 предварительно установленной. Я не в списке sudoers для этой машины, поэтому я встроил Python 2.6.4 в (подкаталог) моего домашнего каталога. Затем я попытался использовать virtualenv (впервые), но получил:

$ Python-2.6.4/python virtualenv/virtualenv.py ENV
New python executable in ENV/bin/python
Could not find platform dependent libraries <exec_prefix>
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
Installing setuptools.........
 Complete output from command /apps/users/dspitzer/ENV/bin/python -c "#!python
\"\"\"Bootstrap setuptoo...

" /apps/users/dspitzer/virtualen...6.egg:
 Could not find platform dependent libraries <exec_prefix>
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
'import site' failed; use -v for traceback
Traceback (most recent call last):
 File "<string>", line 67, in <module>
ImportError: No module named md5
----------------------------------------
...Installing setuptools...done.
Traceback (most recent call last):
 File "virtualenv/virtualenv.py", line 1488, in <module>
  main()
 File "virtualenv/virtualenv.py", line 529, in main
  use_distribute=options.use_distribute)
 File "virtualenv/virtualenv.py", line 619, in create_environment
  install_setuptools(py_executable, unzip=unzip_setuptools)
 File "virtualenv/virtualenv.py", line 361, in install_setuptools
  _install_req(py_executable, unzip)
 File "virtualenv/virtualenv.py", line 337, in _install_req
  cwd=cwd)
 File "virtualenv/virtualenv.py", line 590, in call_subprocess
  % (cmd_desc, proc.returncode))
OSError: Command /apps/users/dspitzer/ENV/bin/python -c "#!python
\"\"\"Bootstrap setuptoo...

" /apps/users/dspitzer/virtualen...6.egg failed with error code 1

Должен ли я установить PYTHONHOME на какое-либо значение? (Я намеренно назвал мой ENV "ENV" из-за отсутствия лучшего имени.)

Не зная, могу ли я игнорировать эти ошибки, я попытался установить нос (0.11.1) в мой ENV:

$ cd nose-0.11.1/
$ ls
AUTHORS    doc/               lgpl.txt     nose.egg-info/  selftest.py*
bin/       examples/          MANIFEST.in  nosetests.1     setup.cfg
build/     functional_tests/  NEWS         PKG-INFO        setup.py
CHANGELOG  install-rpm.sh*    nose/        README.txt      unit_tests/
$ ~/ENV/bin/python setup.py install
Could not find platform dependent libraries <exec_prefix>
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
Traceback (most recent call last):
 File "setup.py", line 1, in <module>
  from nose import __version__ as VERSION
 File "/apps/users/dspitzer/nose-0.11.1/nose/__init__.py", line 1, in <module>
  from nose.core import collector, main, run, run_exit, runmodule
 File "/apps/users/dspitzer/nose-0.11.1/nose/core.py", line 3, in <module>
  from __future__ import generators
ImportError: No module named __future__

Любой совет?

Ответы [ 5 ]

8 голосов
/ 17 февраля 2010

Вы на самом деле запускали "make install" в своей пользовательской сборке python? Обычно вы хотите сделать что-то вроде

./configure --prefix=/path/to/installdir  (other options)
make
make install

Примечание Префиксом может быть любой каталог, к которому у вас есть полные права на запись, например, я очень часто использую $ HOME / apps в средах общего хостинга.

Затем запустите / path / to / installdir / bin / python, а не тот, который находится в вашей директории сборки. Это должно создать правильные переменные, и после этого вы можете установить virtualenv. Лучше всего установить virtualenv, используя его setup.py:

cd virtualenv_source_dir
/path/to/installdir/bin/python setup.py install

Для этого может потребоваться сначала установить setuptools, используя тот же метод.

Затем, наконец:

# Just to be safe
export PATH="/path/to/installdir/bin:$PATH" 

virtualenv ~/ENV
~/ENV/bin/pip install somepackage # (and such)
2 голосов
/ 17 февраля 2010

В дополнение к предложению Crast убедиться, что вы действительно установили свой собственный скомпилированный Python, вы также должны убедиться, что пользовательский Python действительно может найти его библиотеки. Это подсказка, которую вы получаете с сообщением о PYTHONHOME. Ошибки импорта предполагают, что вам нужно установить в .bashrc или соответствующей конфигурации оболочки export PYTHONHOME=/path/to/python_installation.

Кроме того, когда вы пытаетесь указать virtualenv использовать нестандартную версию python, вам необходимо использовать флаг -p,--python, например,

virtualenv --python=/path/to/python_installation/bin/python myenv

См. Также связанный вопрос, «Использовать другую версию Python с virtualenv» .

1 голос
/ 19 сентября 2011

У меня была такая же ошибка при попытке установить в существующий каталог, который уже имел easy_install в lib / python2.6. Мне пришлось поставить ссылку из lib64 / python2.6 на lib / python2.6.

Я не говорю, что мое исправление является правильным, скорее, я указываю на другую причину, по которой вы можете получить эту ошибку.

0 голосов
/ 04 февраля 2015

У меня недостаточно представителя, чтобы добавить это в качестве комментария к ответу @ Crast, и этому вопросу 4 года, но это может быть кому-то полезно. В Windows вы должны указать путь к python.exe , но, похоже, в Linux / OS X вы просто указываете путь к папке. Пример:

Windows

virtualenv -p <PATH TO YOUR DESIRED PYTHON.EXE> venv

Создает виртуальную среду в подпапке "venv" в текущем каталоге.

0 голосов
/ 25 июня 2013

Теперь вы можете легко установить Python как непривилегированный пользователь, используя Anaconda: http://continuum.io/downloads

Это похоже на этот вопрос. После того как ответы подробно описывают создание новой среды, вам не нужно использовать virtual-env и избегать случайных ошибок: Установка Anaconda в виртуальную среду .

conda create -n myenv1 ipython scipy

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