2010-12-09 19 views
5

En el proceso de tratar de escribir un script de Python que usa PIL hoy, descubrí que no parece tenerlo en mi máquina local (OS X 10.5.8, instalación predeterminada de 2.5 Python).¿Cómo configuro un directorio de biblioteca local de python/PYTHONPATH?

Así que corro:

easy_install --prefix=/usr/local/python/ pil 

y se queja un poco sobre /usr/local/python/lib/python2.5/site-packages aún no existentes, así lo creo, y vuelva a intentarlo, y obtén esto:

TEST FAILED: /usr/local/python//lib/python2.5/site-packages does NOT support .pth files error: bad install directory or PYTHONPATH

You are attempting to install a package to a directory that is not on PYTHONPATH and which Python does not read ".pth" files from. The installation directory you specified (via --install-dir, --prefix, or the distutils default setting) was:

/usr/local/python//lib/python2.5/site-packages 

and your PYTHONPATH environment variable currently contains:

'' 

OK, es justo: no había hecho nada para establecer el camino. Así que añadir una línea rápida a ~/.bash_profile:

PYTHONPATH="$PYTHONPATH:/usr/local/python/lib/python2.5"

y source, y vuelve a intentarlo.

Mismo mensaje de error.

Esto es un poco curioso, dado que PYTHONPATH está claramente establecido; Puedo echo $PYTHONPATH y obtener :/usr/local/python/lib/python2.5. Me decidí ir a lo que la ruta de inclusión parecía desde el interior:

import sys 
print "\n".join(sys.path) 

que produce:

/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python25.zip /System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5 /System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/plat-darwin /System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/plat-mac /System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/plat-mac/lib-scriptpackages /System/Library/Frameworks/Python.framework/Versions/2.5/Extras/lib/python /System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/lib-tk /System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/lib-dynload /Library/Python/2.5/site-packages /System/Library/Frameworks/Python.framework/Versions/2.5/Extras/lib/python/PyObjC

de la que /usr/local/python/yadda/yadda es notablemente desaparecidos.

No estoy seguro de lo que se supone que debo hacer aquí. ¿Cómo hago para que python reconozca esta ubicación como una ruta de inclusión?

ACTUALIZACIÓN

Como sugirió Sven Marnach, estaba descuidando a exportar PYTHONPATH. He corregido ese problema y ahora veo que aparece cuando imprimo sys.path desde dentro de Python. Sin embargo, todavía tengo el mensaje de error TEST FAILED que mencioné anteriormente, solo con mi nueva variable de entorno PYTHONPATH.

tanto, he intentado cambiarlo /usr/local/python/lib/python2.5-/usr/local/python/lib/python2.5/site-packages, exportar y ejecutar el mismo comando easy_install nuevo. Esto conduce a un resultado totalmente nuevo que en un principio parecía como el éxito (pero no):

Creating /usr/local/python/lib/python2.5/site-packages/site.py 
Searching for pil 
Reading http://pypi.python.org/simple/pil/ 
Reading http://www.pythonware.com/products/pil 
Reading http://effbot.org/zone/pil-changes-115.htm 
Reading http://effbot.org/downloads/#Imaging 
Best match: PIL 1.1.7 
Downloading http://effbot.org/media/downloads/PIL-1.1.7.tar.gz 
Processing PIL-1.1.7.tar.gz 
Running PIL-1.1.7/setup.py -q bdist_egg --dist-dir /var/folders/XW/XWpClVq7EpSB37BV3zTo+++++TI/-Tmp-/easy_install-krj9oR/PIL-1.1.7/egg-dist-tmp--Pyauy 
--- using frameworks at /System/Library/Frameworks 
[snipped: compiler warnings] 
-------------------------------------------------------------------- 
PIL 1.1.7 SETUP SUMMARY 
-------------------------------------------------------------------- 
version  1.1.7 
platform  darwin 2.5.1 (r251:54863, Sep 1 2010, 22:03:14) 
       [GCC 4.0.1 (Apple Inc. build 5465)] 
-------------------------------------------------------------------- 
--- TKINTER support available 
--- JPEG support available 
--- ZLIB (PNG/ZIP) support available 
*** FREETYPE2 support not available 
*** LITTLECMS support not available 
-------------------------------------------------------------------- 
To add a missing option, make sure you have the required 
library, and set the corresponding ROOT variable in the 
setup.py script. 

To check the build, run the selftest.py script. 
zip_safe flag not set; analyzing archive contents... 
Image: module references __file__ 
No eggs found in /var/folders/XW/XWpClVq7EpSB37BV3zTo+++++TI/-Tmp-/easy_install-krj9oR/PIL-1.1.7/egg-dist-tmp--Pyauy (setup script problem?) 

De nuevo, esto se ve bien, pero cuando voy a correr mi script:

Traceback (most recent call last):
File "checkerboard.py", line 1, in import Image, ImageDraw ImportError: No module named Image

Cuando compruebo lo que está ahora bajo /usr/local/python/ usando find ., me sale:

./lib ./lib/python2.5 ./lib/python2.5/site-packages ./lib/python2.5/site-packages/site.py ./lib/python2.5/site-packages/site.pyc

Así que ... nada módulo de aspecto (estoy asumiendo site.py y site.pyc son metadatos o scripts de ayuda). ¿A dónde fue la instalación?

observo esto:

To check the build, run the selftest.py script.

pero realmente no saben lo que es.

Y también me di cuenta el mensaje "No se encontraron huevos". ¿Alguno de estos consejos?

+1

¿Ha exportado el 'PYTHONPATH'? Simplemente establecerlo como una variable de shell no ayuda. Pruebe 'export PYTHONPATH =" $ PYTHONPATH: /usr/local/python/lib/python2.5 "' y use 'env' para verificar que realmente se haya exportado al entorno. –

+0

Huh. De acuerdo, definitivamente necesito sugerencias para una buena introducción a la comprensión de variables de shell/entorno y comandos como 'env' y' export' y 'source' better. Con mucho gusto recibiré sugerencias. Esto es solo parte del problema, sin embargo ... ahora que he seguido las sugerencias de Sven, la ruta parece ser reconocida en 'sys.path', pero sigo obteniendo el mensaje 'prueba fallida' de fácil instalación . Actualizaré mi pregunta para reflejar esto. –

Respuesta

4

está utilizando el Apple-suministrado Python 2.5 en OS X; es una construcción de framework y, por defecto, usa /Library/Python/2.5/site-packages como la ubicación para los paquetes instalados, no /usr/local. Normalmente no debería necesitar especificar --prefix con una compilación de marco OS X. También tenga en cuenta que el setuptools (easy_install) suministrado por Apple con OS X 10.5 también es bastante antiguo, al igual que la versión de Python.

Dicho esto, la instalación de PIL completa y correctamente en OS X en especial OS X 10.5 no es particularmente simple. Busque en los archivos o en otros lugares para obtener consejos y/o paquetes binarios. Particularmente si planea usar otros módulos como MySQL o Django, mi recomendación es instalar todo (Python y PIL) usando un administrador de paquetes como MacPorts.

1

¿Por qué se especifica --prefix en su easy_install invocación? ¿Usted intentó simplemente:

sudo easy_install pil 

Si sólo está tratando de instalar PIL en la ubicación predeterminada, yo creo easy_install podría funcionar la ruta correcta. (Es evidente que no es así /usr/local/python ...)

EDITAR: Alguien abajo votó esta respuesta, tal vez porque era demasiado escueta . Eso es lo que recibo por tratar de publicar una respuesta desde mi teléfono celular, supongo. Pero el quid de la cuestión es perfectamente válido, en mi humilde opinión: si está utilizando --prefix para especificar una instalación personalizada ubicación con easy_install, estás tipo de 'hacerlo mal'. Puede ser posible para hacer esto, pero la documentación easy_install tiene una sección en custom installation locations que ni siquiera menciona esto como una posibilidad, excepto como un pequeño ajuste a la opción virtual python. Sugiero seguir el OS X instructions si desea instalar en una ubicación personalizada en una Mac, --prefix simplemente no parece ser la herramienta adecuada para el trabajo.

+1

Por lo general, me gusta mantener los paquetes/bibliotecas que vienen con una instalación predeterminada separada de los que instalo, particularmente si se trata de cosas que soy nueva, y generalmente es bastante práctico hacerlo. Si resulta ser menos práctico con Python, tal vez renuncie a la idea. –

+1

@WestonC, dependiendo de sus necesidades, usted puede ser mejor servido con [virtualenv] (http://virtualenv.readthedocs.org/en/latest/) para mantener 'su' módulos de Python separados de los módulos instalados por el sistema. La gran mayoría de los paquetes se instalan perfectamente si lo hace 'python setup.py install' dentro de un virtualenv. Para aquellos paquetes (como PyQt) que no funcionan bien con virtualenvs, casi siempre se puede evitar esto usando un truco como el descrito en [esta respuesta] (http://stackoverflow.com/questions/1961997/is- it-possible-to-add-pyqt4-pyside-packages-on-a-virtualenv-sandbox # 8160111). – evadeflow

Cuestiones relacionadas