我有一组像这样组织的python脚本:
PythonScripts/
TypeAScripts/
TypeASet1Scripts/
example.py
TypeASet2Scripts/
TypeBScripts/
TypeBSet1Scripts/
TypeBSet2Scripts/
TypeCScripts/
TypeCSet1Scripts/
TypeCSet2Scripts/
CommonFunctions/
CommonFunctions.py
每个文件夹中都有init.py
。我想要的是能够example.py
example.py
从CommonFunctions
导入 import PythonScripts.CommonFunctions.CommonFunctions
。我希望文件夹A,B和C中的脚本也能这样做。
要使用绝对导入执行此操作,您需要输入
PythonScripts
但是,这只有在example.py
位于python路径中时才有效。如果您只是在该文件夹中运行sys.append()
,情况就不是这样了。您可以使用{{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
工具使虚拟环境的使用变得简单。