No importa módulos y paquetes de caminos arbritary En cambio, en python que use paquetes e importaciones absolutas. Eso evitará todos los problemas futuros.
Ejemplo:
crear los siguientes archivos:
MyApp\myapp\__init__.py
MyApp\myapp\utils\__init__.py
MyApp\myapp\utils\charts.py
MyApp\myapp\model\__init__.py
MyApp\myapp\view\__init__.py
MyApp\myapp\controller\__init__.py
MyApp\run.py
MyApp\setup.py
MyApp\README
Los archivos deben estar vacía a excepción de aquellos:
MyApp\myapp\utils\charts.py:
class GChartWrapper(object):
def __init__(self):
print "DEBUG: An instance of GChartWrapper is being created!"
MyApp\myapp\view\__init__.py:
from myapp.utils.charts import GChartWrapper
def start():
c = GChartWrapper() # creating instance of the class
MyApp\run.py:
from myapp.view import start
start()
Eso es todo! Cuando ejecuta su punto de entrada (run.py
) llama a una función en la vista y crea una instancia de la clase GChartWrapper. Usando esta estructura puedes importar cualquier cosa en cualquier lugar y usarla.
Para complementar, en MyApp\setup.py
, escriba un programa de instalación para el paquete MyApp \ myapp. Use distutils para escribirlo:
from distutils.core import setup
setup(name='MyApp',
version='1.0',
description='My Beautiful Application',
author='Martin',
author_email='[email protected]',
url='http://stackoverflow.com/questions/1003843/',
packages=['myapp'],
scripts=['run.py']
)
That is enough. Ahora, cuando las personas descargan la carpeta MyApp, pueden instalarla usando setup.py y ejecutarla usando run.py. Distutils puede generar paquetes en varios formatos, incluyendo Windows instalable .EXE
Es la forma estándar de distribución de paquetes/aplicaciones de python.
Estoy tratando de usar GChartWrapper en App Engine, por lo que realmente no puedo ejecutar la configuración. ¡Gracias! :) – Martin