Pregunta

Tengo un problema en relación con los paquetes de Python y prueba. Estoy escribiendo una aplicación que utiliza wx pitón y tienen la siguiente estructura básica carpeta / paquete para las partes de la GUI. El mainframe.py ventana tiene una dependencia a la logpane.py Panel, que se importa fácilmente utilizando una importación absoluta en mainframe.py :

import guiapp.utilviews.logpane

Carpeta / presentación de embalaje:

mainapp
   - main.py
   guiapp
       - __init__.py
       utilviews
           - __init__.py
           - logpane.py
           - other stuff...
       mainview
           - __init__.py
           - mainframe.py
           - other stuff here...
       other views...

Sin embargo, para las partes de la GUI de la aplicación Me gustaría, además de las pruebas de unidad (y no plantean ningún problema), tienen un pequeño "test" / ejemplo para cada vista. Es decir, para el logpane, me gustaría tener pequeño ejemplo ejecutable que lauch una aplicación hueso desnudo que muestra la vista a prueba que el diseño está bien, etc. La forma en que empecé a cabo era que tenía un

if __name__ == "__main__":
    # create some small window and a wx app
    # instanciate the panel and launch the app
    pass

en el archivo de implementación real del panel / verse a sí misma. Esto funcionó de maravilla para el logpane. Tan sólo pudiera ejecutar el archivo independiente a echar un vistazo a la vista y ver que se mantiene unida.

Pero, por supuesto, la estrategia se rompió para el mainframe.py ya que la dependencia a logpane.py no se pudo resolver. Esto ya que el módulo principal corriente es el mainframe.py y la única manera mainframe.py puede llegar el paquete utilviews es si el módulo principal / es lanzado más arriba en el árbol.

Entonces, ¿cómo estructurar este tipo de pruebas? Para las pruebas de unidad que utilizo nariz , que es bonito y se hace cargo del problema, ya que se puso en marcha la nariz por la carpeta MainApp (por lo que todas las obras referencias intrapackage). Sin embargo, estas pruebas son como pequeños programas independientes. Simplemente no puedo desorden de la carpeta MainApp con estos archivos pitón (habrá muchos de estos archivos). ¿Hay alguna otra manera puedo lograr esto?

Cualquier entrada es valioso.

Gracias, Rickard

¿Fue útil?

Solución

Se puede usar PYTHONPATH. Configurarlo a su directorio principal del proyecto, antes de ejecutar el archivo de prueba. A continuación, será capaz de resolver todas sus importaciones como si usted estaría ejecutando desde ese directorio.

$ find
.
./test
./test/test.py
./some
./some/__init__.py

$ cat some/__init__.py 
x = 10

$ cat test/test.py 
import some
print some.x

$ cd test
$ export PYTHONPATH=..
$ python test.py
10
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top