Вы не импортировать модули и пакеты из arbritary путей Вместо этого питона вы использовать пакеты и абсолютный импорт, что позволит избежать всех будущих проблем.
Пример:
создать следующие файлы:
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
Файлы должны быть пустыми за исключением тех:
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()
Это все! Когда вы запустите свою точку входа (run.py
), она вызывает функцию в представлении и создает экземпляр класса GChartWrapper. Используя эту структуру, вы можете импортировать что угодно и использовать ее.
В дополнение к MyApp\setup.py
вы пишете программу установки для пакета MyApp \ myapp. Используйте distutils, чтобы написать:
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']
)
Этого достаточно. Теперь, когда люди загружают папку MyApp, они могут просто установить ее с помощью setup.py и запустить ее с помощью run.py. Distutils может генерировать пакеты в нескольких форматах, включая окна, устанавливаемые .EXE
Это стандартный способ распространения пакетов/приложений python.
Я пытаюсь использовать GChartWrapper в App Engine, поэтому я не могу запустить настройку. Благодаря! :) – Martin