Comment puis-je contourner ce problème en créant un environnement de virtualenv avec Python-build personnalisé?
-
21-09-2019 - |
Question
Je dois exécuter un code sur une machine Linux avec Python 2.3.4 Pre installé. Je ne suis pas sur la liste sudoers pour cette machine, je construit Python 2.6.4 dans (un sous-répertoire) mon répertoire personnel. Alors je tenté d'utiliser virtualenv (pour la première fois), mais a obtenu:
$ 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
Dois-je installerai PYTHONHOME une certaine valeur? (I intentionnellement nommé mon ENV "ENV" faute d'un meilleur nom.)
Ne sachant pas si je peux ignorer ces erreurs, j'ai essayé d'installer le nez (0.11.1) dans mon 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__
Un conseil?
La solution
Avez-vous fait exécuter "make install" sur votre build python personnalisé? Habituellement vous voulez faire quelque chose comme
./configure --prefix=/path/to/installdir (other options)
make
make install
Remarque Prefix peut être un répertoire que vous avez-écriture des autorisations complètes, par exemple, je l'utilise très souvent $ HOME / applications sur les environnements d'hébergement partagé.
Ensuite, exécutez / chemin / vers / installdir / bin / python, pas celui de votre répertoire de construction. Cela devrait créer les variables correctes, et après que vous pouvez installer virtualenv. Peut-être préférable d'installer virtualenv en utilisant son setup.py:
cd virtualenv_source_dir
/path/to/installdir/bin/python setup.py install
Cela peut nécessiter l'installation setuptools d'abord, en utilisant la même méthode.
Puis enfin:
# Just to be safe
export PATH="/path/to/installdir/bin:$PATH"
virtualenv ~/ENV
~/ENV/bin/pip install somepackage # (and such)
Autres conseils
En plus de la suggestion de Crast de faire en sorte que vous avez réellement installé votre commande compilé Python, vous devez également vérifier que la coutume Python peut effectivement trouver ses bibliothèques. C'est l'indice que vous obtenez avec le message sur PYTHONHOME
. Les erreurs d'importation indiquent que vous devez définir dans votre .bashrc
ou configuration shell appropriée export PYTHONHOME=/path/to/python_installation
.
En outre, lorsque vous essayez de dire virtualenv d'utiliser une version non-défaut de python, vous devez utiliser le drapeau de -p,--python
, par exemple.
virtualenv --python=/path/to/python_installation/bin/python myenv
Voir aussi la question connexe, "Utiliser une autre version Python avec virtualenv" .
J'ai eu la même erreur lors de l'installation sur un répertoire existant qui avait déjà easy_install dans lib / python2.6. Je devais mettre un lien de lib64 / python2.6 à lib / python2.6.
Je ne dis pas que ma solution est la bonne solution, plutôt, je pointant vers une autre raison pour laquelle vous pourriez obtenir cette erreur.
Maintenant, vous pouvez facilement installer Python en tant qu'utilisateur non privilégié en utilisant Anaconda: http://continuum.io/downloads
Il est similaire à cette question. Une fois que des réponses Détails faire un nouvel environnement, de sorte que vous n'avez pas besoin d'utiliser-env virtuel et éviter les pièges occasionnels:
Je n'ai pas assez représentant d'ajouter cela comme un commentaire sur @ réponse de Crast et cette question est de 4 ans, mais cela pourrait être utile à quelqu'un. Sous Windows, vous devez chemin vers python.exe , mais il semble que sous Linux / OS X que vous venez de chemin d'accès au dossier. Exemple: Windows: crée un environnement virtuel dans un sous-dossier « venv » dans le répertoire courant. virtualenv -p <PATH TO YOUR DESIRED PYTHON.EXE> venv