将 Python 个包从单独的目录插入到不同的命名空间
Insert Python Packages from Separate Directory into a different Namespace
假设在我的 Python 路径中,我有命名空间 foo
。我在名为 bar
的单独目录(不在 python 路径中)中有模块:x.py
、y.py
、z.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 x
或 from foo.x import my_function
的事情]?理想情况下寻找适用于 Python 2.7 和 Python 3.6 的解决方案,但这并不严格。
编辑:我想补充一点,在理想情况下,bar/
也可以有子文件夹或子包。
忘了我在这里问过这个问题,但是,以防万一其他人在这里结束,这就是我最终做的。
# /python/path/site-packages/foo/__init__.py
__path__.append("/some/other/directory/bar/")
特定命名空间的 __path__
告诉 Python 该命名空间应该查看哪些目录。
假设在我的 Python 路径中,我有命名空间 foo
。我在名为 bar
的单独目录(不在 python 路径中)中有模块:x.py
、y.py
、z.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 x
或 from foo.x import my_function
的事情]?理想情况下寻找适用于 Python 2.7 和 Python 3.6 的解决方案,但这并不严格。
编辑:我想补充一点,在理想情况下,bar/
也可以有子文件夹或子包。
忘了我在这里问过这个问题,但是,以防万一其他人在这里结束,这就是我最终做的。
# /python/path/site-packages/foo/__init__.py
__path__.append("/some/other/directory/bar/")
特定命名空间的 __path__
告诉 Python 该命名空间应该查看哪些目录。