2011-07-23 22 views
7

Desarrollo la aplicación Python que decidí convertir en paquete para ser instalado por easy_install o pip más tarde. He usado la búsqueda para encontrar varias fuentes útiles sobre la estructura de directorios para paquetes de Python. Vea this answer o this post.Scripts en el paquete python

he creado siguiente estructura (he omitido varios archivos de la lista para que sea más clara strcture)

 
Project/ 
|-- bin/ 
|-- my_package/ 
| |-- test/ 
| | |-- __init__.py 
| | |-- test_server.py 
| |-- __init__.py 
| |-- server.py 
| |-- util.py 
|-- doc/ 
| |-- index.rst 
|-- README.txt 
|-- LICENSE.txt 
|-- setup.py   

Después de eso creé script ejecutable server-run

 
#!/usr/bin/env python 
from my_package import server 

server.main() 

cual coloqué en bin directorio. Si instalo mi paquete con python setup.py install o a través de pip/easy_install todo funciona bien, puedo ejecutar server-run y mi servidor comienza a manejar las solicitudes entrantes.

Pero mi pregunta es cómo probar que server-run obras en el entorno de desarrollo (sin necesidad de instalación previa de my_package)? También quiero utilizar esta secuencia de comandos para ejecutar el último código de servidor para fines de desarrollo.

Desarrollo sucede en Project directorio por lo que estoy recibiendo ImportError si corro ./bin/server-run

 
[email protected]:~/dev/Project/$ ./bin/server-run 
Traceback (most recent call last): 
    File "./bin/server-run", line 2, in 
    import my_package 
ImportError: No module named my_package 

¿Es posible modificar bin/server-run secuencia de comandos para que funcione si lo funciono de otra carpeta en algún lugar del sistema de archivos (no necesariamente de Project dir)? También tenga en cuenta que quiero utilizar (si es posible lograrlo) el mismo script para ejecutar el servidor en el entorno de producción.

Respuesta

3

Necesita importaciones relativas. Trate

from .. import mypackage 

o

from ..mypackage import server 

La documentación está aquí

http://docs.python.org/tutorial/modules.html#intra-package-references

Estos trabajos sobre Python 2.5 o posterior.

para hacerlo sólo en la versión de desarrollo, probar:

try: 
    from my_package import server 
except ImportError: 
    from ..my_package import server 
+0

Pero si utilizo este código 'servidor run' no va a funcionar después de la instalación del paquete. – Alik

+0

Actualizado con la forma de probar la versión normal primero. – agf

+0

Huh. Me olvidé de ImportException :) ¡Gracias! – Alik

4

Usted puede utilizar virtualenv para probar el código Python mientras que en el desarrollo como si fue puesto en libertad

2

La forma más sencilla es configurar la derecha Ruta de Python, por lo que Python sabe buscar my_package en el directorio actual.

En Linux (usando Bash):

export PYTHONPATH=. 
bin/server-run 

En Windows:

set PYTHONPATH=. 
python bin/server-run 
Cuestiones relacionadas