Python 包内导入 - 如何让通用函数/类分布在我的包中?

标签 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 中的脚本都执行相同的操作。

要用绝对导入来做到这一点,你会把

 import PythonScripts.CommonFunctions.CommonFunctions 

但是,这仅在 PythonScripts 在您的 python 路径中时有效。其中,如果您只是在该文件夹中运行 example.py,则情况并非如此。您可以使用 sys.append() 添加它,但这似乎是一种笨拙的做法。有没有更好的方法?

最佳答案

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

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

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

关于Python 包内导入 - 如何让通用函数/类分布在我的包中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14867952/

相关文章:

python - Google App Engine Blob Store...更改文件大小的语法?

python - 哪种redis方法比较好 : calling HSET multiple times or calling HMSET once?

python - 如何在 bash/Python/Fabric/sh 脚本中使用 pew?

python - 即使在 image.Show() 之后图像也不会显示

python - 如何使用 docker-py(官方 docker 客户端)启动 bash shell?

python - Mongodb 或 Couchdb 与 django 构建类似于顶级编码器的应用程序?

Python 找不到模块

python - 如何在Python中复制SQL窗口排名

python - (python) Telegram bot-如何定期发送消息?

python - 如何使用 gpiozero button.when_pressed 函数来使用输入和输出整数的函数?