Nie importować moduły i pakiety z arbritary ścieżek Zamiast w Pythonie użyj pakietów i bezwzględnego importu, aby uniknąć wszystkich przyszłych problemów.
przykład:
tworzyć pliki:
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
pliki powinny być puste wyjątkiem tych:
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()
To wszystko! Po uruchomieniu punktu wejścia (run.py
) wywołuje on funkcję w widoku i tworzy instancję klasy GChartWrapper. Korzystając z tej struktury, możesz zaimportować wszystko w dowolnym miejscu i używać go.
Aby uzupełnić, w MyApp\setup.py
piszesz program instalacyjny dla pakietu MyApp \ myapp. Użyj distutils, aby go napisać:
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']
)
To wystarczy. Teraz, kiedy ludzie pobierają folder MyApp, mogą po prostu zainstalować go za pomocą pliku setup.py i uruchomić go za pomocą programu run.py. Distutils mogą generować pakiety w wielu formatach, w tym instalować w oknach .EXE
Jest to standardowy sposób dystrybucji pakietów/aplikacji Pythona.
Próbuję użyć GChartWrapper na App Engine, więc nie mogę naprawdę uruchomić instalacji. Dzięki! :) – Martin