Python包内导入如何获得分布在整个包中的通用函数/类?

2024-05-23 21:39:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一组按如下方式组织的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中的脚本也能这样做。在

对于绝对进口,你应该

^{pr2}$

但是,只有当PythonScripts在python路径中时,这才有效。如果您只是在那个文件夹中运行example.py,则不会是这样。您可以使用sys.append()添加它,但这似乎是一种笨拙的方式。有更好的方法吗?在


Tags: py脚本文件夹example方式pythonscriptscommonfunctionstypebscripts
1条回答
网友
1楼 · 发布于 2024-05-23 21:39:56

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

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

另外,如果您担心您的全局站点包目录,我建议您在Python virtual environment中进行测试安装。尤其是^{}工具使虚拟环境的工作变得简单。在

相关问题 更多 >