这是解决我的问题的方法,尽管起初可能并不明显。
在我的项目中,我现在介绍了一个约定,即每个客户一个名称空间。在每个客户文件夹(
cust1,
cust2等)中,都有一个
__init__.py包含以下代码的文件:
import pkgutil__path__ = pkgutil.extend_path(__path__, __name__)
__init__.py程序包中的所有其他文件都是空的(主要是因为我还没有时间去弄清楚它们的其他用途)。
正如解释在这里,
extend_path可以确保Python是知道有一个包,身体的其他位置并在多个子包-
从我的理解-解释则不会停止搜索后未找到的第一个包路径下的模块它在中遇到
sys.path,但在中搜索所有路径
__path__。
我现在可以以一致的方式访问所有项目之间的所有代码,例如
from cust1.proj1.pack1.mod1 import somethingfrom cust3.proj4.pack1.mod4 import something_elsefrom cust3.proj1.pack4.mod4 import yet_something_else
不利的一面是,我不得不创建一个更深层次的项目文件夹结构:
/path/ to/ projects/ cust1/ proj1/ Development/ pre/ python/ cust1/ __init__.py <--- contains pre as described above proj1/ __init__.py <--- empty pack1/ __init__.py <--- empty mod1.py
但这对我来说似乎是可以接受的,尤其是考虑到我需要花很少的精力来维持这一惯例。为该项目
sys.path扩展
/path/to/projects/cust1/proj1/Development/pre/python。
在一个旁注中,我注意到
__init__.py在同一个客户的所有文件中
sys.path,无论我从哪个项目中导入内容,都会执行路径中第一个出现的文件。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)