Вы не импортируете модули и пакеты из произвольных путей. Вместо этого в python вы используете пакеты и абсолютный импорт. Это позволит избежать всех будущих проблем.
Пример:
создайте следующие файлы:
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='martin@xxxxxxx.com',
url='/871770/kak-importirovat-modul-iz-kataloga-na-urovne-vyshe-tekuschego-skripta',
packages=['myapp'],
scripts=['run.py']
)
Этого достаточно. Теперь, когда люди скачивают папку MyApp, они могут просто установить ее с помощью setup.py и запустить ее с помощью run.py. Distutils может генерировать пакеты в нескольких форматах, включая устанавливаемые Windows .EXE
Это стандартный способ распространения пакетов / приложений Python.