将Python软件包从单独的目录插入不同的命名空间

时间:2018-11-16 20:53:41

标签: python python-3.x python-2.7 path site-packages

假设在我的Python路径中,我有命名空间foo。我在名为bar的单独目录中(不在python路径中)有模块:x.pyy.pyz.py。因此,布局可能看起来像这样:

|--/python/path/site-packages/foo/ 
|----__init.py__
|--...
|--/some/other/directory/bar/
|----__init__.py
|----x.py
|----y.py
|----z.py

因此,考虑到foo已经在我的路径中,我可以轻松地执行import foo。但是,是否可以在foo/__init__.py中添加任何形式的黑魔法,以便在我的Python shell中开始做类似from foo import xfrom foo.x import my_function的事情?理想情况下,寻找一种可以在Python 2.7和Python 3.6上运行的解决方案,但这并不严格。

编辑:我想补充一点,在理想情况下,bar/也可以具有子文件夹或子包。

1 个答案:

答案 0 :(得分:0)

忘了我在这里问过这个问题,但是,如果其他人最终在这里,这就是我最终要做的。

# /python/path/site-packages/foo/__init__.py
__path__.append("/some/other/directory/bar/")

特定名称空间的__path__告诉Python该名称空间应查看的目录。