2010-02-17 1 views
5

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

$ 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__ 

Любые советы?

+0

Я уже размещал это на ServerFault: http://serverfault.com/questions/113656/, но я видел, что здесь есть еще много виртуальных вопросов, поэтому я решил также опубликовать здесь. –

ответ

7

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

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

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

Затем запустите/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

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

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

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

Смотрите также связанный с этим вопрос, "Use different Python version with virtualenv".

+1

Если python 'make install''s правильно, вам не нужно устанавливать среду PYTHONHOME var. Это в основном используется для использования одного двоичного файла с совершенно другим stdlib-контуром. Обычно это значение автоматически определяется из префикса установки, скомпилированного в ваш интерпретатор python. Это может также запутать virtualenv, который, вероятно, будет манипулировать PYTHONHOME или эквивалентом в интерпретаторе. – Crast

1

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

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

0

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

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

conda create -n myenv1 ipython scipy

0

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

Окна:

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

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

+0

На самом деле Linux в этом случае тоже. Оба ожидают исполняемый файл python. В Linux исполняемые файлы не обязаны заканчиваться на .exe –

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