2010-02-17 18 views
5

Necesito ejecutar algún código en una máquina Linux con Python 2.3.4 preinstalado. No estoy en la lista de sudoers para esa máquina, por lo que construí Python 2.6.4 en (un subdirectorio en) mi directorio personal. Entonces intentado utilizar virtualenv (por primera vez), pero tengo:¿Cómo puedo evitar este problema creando un entorno virtualenv con un Python personalizado?

$ 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 

¿Debo estar fijándose PYTHONHOME a algún valor? (Intencionalmente puse el nombre de mi ENV "ENV" a falta de un nombre mejor.)

Sin saber si puedo ignorar esos errores, he intentado instalar la nariz (0.11.1) en mi 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__ 

¿Algún consejo?

+0

Ya publiqué esto en ServerFault: http://serverfault.com/questions/113656/, pero vi que hay muchas más preguntas virtualenv aquí, así que decidí publicar también aquí. –

Respuesta

7

¿Realmente ha ejecutado "make install" en su versión de python personalizada? Por lo general, usted querrá hacer algo como

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

Nota prefijo puede ser cualquier directorio que tiene el pago total de permisos a, por ejemplo, yo utilizo muy a menudo $ HOME/aplicaciones en entornos de alojamiento compartido.

Luego ejecute/ruta/a/installdir/bin/python, no el de su directorio de compilación. Esto debería crear las variables correctas, y luego de eso puedes instalar virtualenv. Podría ser mejor para instalar virtualenv utilizando su setup.py:

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

Esto puede requerir la instalación de setuptools primer lugar, utilizando el mismo método.

Entonces, finalmente:

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

virtualenv ~/ENV 
~/ENV/bin/pip install somepackage # (and such) 
2

Además de la sugerencia de asegurarse de que realmente instalado el encargo de Python compilado Crast, también debe comprobar que la costumbre de Python en realidad puede encontrar sus bibliotecas. Esta es la pista que está recibiendo con el mensaje sobre PYTHONHOME. Los errores de importación sugieren que debe configurar en su .bashrc o configuración de shell adecuada export PYTHONHOME=/path/to/python_installation.

Además, cuando usted está tratando de decirle virtualenv utilizar una versión no por defecto de Python, es necesario utilizar la bandera -p,--python, por ejemplo,

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

Véase también la pregunta relacionada, "Use different Python version with virtualenv".

+1

Si el python es 'make install'editado correctamente, no debería necesitar establecer la var. De entorno PYTHONHOME. Esto se usa principalmente para usar un solo binario con una ruta stdlib completamente diferente. Normalmente, este valor se determina automáticamente a partir del prefijo de instalación compilado en su intérprete de Python. Esto también puede confundir virtualenv, que probablemente manipula PYTHONHOME o su equivalente en el intérprete. – Crast

1

Tuve el mismo error al intentar instalar en un directorio existente que ya tenía easy_install en lib/python2.6. Tuve que poner un enlace de lib64/python2.6 a lib/python2.6.

No digo que mi solución sea la correcta, sino que estoy señalando otra razón por la que podría obtener este error.

0

no tengo representante suficiente para agregar esto como un comentario sobre la respuesta de @ Crast y esta cuestión es de 4 años de edad, pero esto podría ser útil a alguien. En Windows, debe desviarse a python.exe, pero parece que en Linux/OS X acaba de acceder a la carpeta. Ejemplo:

de Windows:

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

Crea un entorno virtual en la subcarpeta "Venv" en el directorio actual.

+0

En realidad, Linux es el mismo en este caso. Ambos esperan el ejecutable de Python. En Linux no es necesario que los ejecutables finalicen con .exe –

Cuestiones relacionadas