我有一组按如下方式组织的python脚本:
PythonScripts/
TypeAScripts/
TypeASet1Scripts/
example.py
TypeASet2Scripts/
TypeBScripts/
TypeBSet1Scripts/
TypeBSet2Scripts/
TypeCScripts/
TypeCSet1Scripts/
TypeCSet2Scripts/
CommonFunctions/
CommonFunctions.py
每个文件夹中都有init.py
。我想要的是能够运行example.py
,其中example.py
从CommonFunctions
导入。我希望文件夹A、B和C中的脚本也能这样做。在
对于绝对进口,你应该
^{pr2}$但是,只有当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中进行测试安装。尤其是^{} 工具使虚拟环境的工作变得简单。在
相关问题 更多 >
编程相关推荐