您不会从任意路径导入模块和包。相反,在 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='http://stackoverflow.com/questions/1003843/',
packages=['myapp'],
scripts=['run.py']
)
足够了。现在,当人们下载 MyApp 文件夹时,他们可以使用 setup.py 安装它并使用 run.py 运行它。Distutils 可以生成多种格式的包,包括 Windows 可安装的 .EXE
这是分发 python 包/应用程序的标准方式。