Как мне обойти эту проблему, создав среду virtualenv с помощью Python пользовательской сборки?
-
21-09-2019 - |
Вопрос
Мне нужно запустить некоторый код на компьютере с 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" из-за отсутствия лучшего имени.)
Не зная, могу ли я игнорировать эти ошибки, я попытался установить nose (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__
Есть какой-нибудь совет?
Решение
Вы действительно запускали "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)
Другие советы
В дополнение к предложению Крэста убедиться, что вы действительно установили свой пользовательский скомпилированный 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".
У меня была такая же ошибка при попытке установки в существующий каталог, в котором уже был easy_install в lib / python2.6.Мне пришлось поместить ссылку из lib64 / python2.6 в lib / python2.6.
Я не говорю, что мое исправление является правильным, скорее, я указываю на другую причину, по которой вы можете получить эту ошибку.
Теперь вы можете легко установить Python как непривилегированный пользователь, используя Anaconda: http://continuum.io/downloads
Это похоже на этот вопрос.В одном из ответов подробно описывается создание новой среды, поэтому вам не нужно использовать virtual-env и избегать случайных ошибок: Установка Anaconda в виртуальную среду.
conda create -n myenv1 ipython scipy
У меня недостаточно репутации, чтобы добавить это в качестве комментария к ответу @Crast, и этому вопросу 4 года, но это может быть кому-то полезно.В Windows вы должны перейти к python.exe, но кажется, что в Linux / OS X вы просто указываете путь к папке.Пример:
Windows:
virtualenv -p <PATH TO YOUR DESIRED PYTHON.EXE> venv
Создает виртуальную среду во вложенной папке "venv" в текущем каталоге.