2

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

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

init.py每个文件夹中。example.py我想要的是能够example.pyCommonFunctions. 我希望文件夹 A、B 和 C 中的脚本执行相同的操作。

要使用绝对进口做到这一点,你会放

 import PythonScripts.CommonFunctions.CommonFunctions 

但是,这仅PythonScripts在您的 python 路径中有效。如果您只是example.py在该文件夹中运行,则不会出现这种情况。您可以添加它sys.append(),但这似乎是一种尴尬的方式。有没有更好的方法?

4

1 回答 1

1

Python 支持相对导入,但根据我的经验,它们很挑剔,不会做你期望它们做的事情。您可以在PEP 328中找到有关它们的更多信息。

我建议正确打包您的模块并编写一个setup.py文件以将它们安装到全局站点包目录中。这将允许您使用绝对导入从系统上的任何位置引用您的模块,并且还为您提供了将它们注册到Python 包索引 (PyPi)以分发给第三方的选项。关于如何做到这一点的一个很好的教程是“The Hitchhiker's Guide to Packaging 1.0”

此外,如果您担心会破坏全局站点包目录,我建议您在Python 虚拟环境中进行测试安装。该virtualenv工具尤其使虚拟环境的工作变得简单。

于 2013-02-14T05:32:24.710 回答