Python Intra-Package Imports - 如何在我的包中传播通用函数/类?

时间:2013-02-14 04:45:21

标签: python

我有一组像这样组织的python脚本:

PythonScripts/
     TypeAScripts/
        TypeASet1Scripts/
            example.py
        TypeASet2Scripts/
     TypeBScripts/
        TypeBSet1Scripts/
        TypeBSet2Scripts/
     TypeCScripts/
        TypeCSet1Scripts/
        TypeCSet2Scripts/
     CommonFunctions/
        CommonFunctions.py

每个文件夹中都有init.py。我想要的是能够example.py example.pyCommonFunctions导入 import PythonScripts.CommonFunctions.CommonFunctions 。我希望文件夹A,B和C中的脚本也能这样做。

要使用绝对导入执行此操作,您需要输入

PythonScripts

但是,这只有在example.py位于python路径中时才有效。如果您只是在该文件夹中运行sys.append(),情况就不是这样了。您可以使用{{1}}添加它,但这似乎是一种尴尬的方式。有没有更好的方法?

1 个答案:

答案 0 :(得分:1)

Python支持相对导入,但根据我的经验,它们很挑剔并且没有按照您的期望去做。您可以在PEP 328中找到有关它们的更多信息。

我建议正确打包模块并编写setup.py文件,将它们安装到全局site-packages目录中。这将允许您使用绝对导入从系统中的任何位置引用模块,并且还可以选择使用Python Package Index (PyPi)注册它们以便分发给第三方。关于如何执行此操作的好教程是"The Hitchhiker's Guide to Packaging 1.0"

此外,如果您担心自己的全球网站包目录,我建议您在Python virtual environment中进行测试安装。特别是virtualenv工具使虚拟环境的使用变得简单。