【发布时间】:2018-09-26 01:24:10
【问题描述】:
我希望我的项目在两种不同的情况下工作。它应该作为一个独立的库工作,也可以作为一个更大项目的子包。主要用例是独立库,其内部导入应采用以下形式
from my_library import sub_package
将代码用作较大项目的子包时,这些导入不起作用,因为没有全局名称 my_library。相反,我将不得不使用相对或绝对导入,例如
from large_project.my_library import sub_package
假设我按照第一个示例所示编写了我的库。作为大型项目的一部分运行时,如何覆盖导入行为以自动调整导入路径?
【问题讨论】:
-
importing behavior是什么意思?您的意思是从子目录导入时“执行不同的功能”吗? -
@MatrixTai 目标是使第一个框中显示的导入即使在代码用作另一个项目中的子包而不是外部依赖项时也能正常工作。我可以想象使用导入钩子来捕获所有导入,然后将
my_library替换为__module__.my_library或类似的,但我不熟悉 Python 的这些很少使用的功能。 -
如果不添加任何行(如
sys.path.append()或importlib.import_module)就不可能使第一个工作,就像将my_library放入另一个项目时,python 将其视为module和@ 987654331@ 是submodule,如果不声明它的父级,则无法访问子模块。 -
@MatrixTai 没错。我正在寻找一个可以添加到 my_library/__init__.py 的 sn-p,当它作为子包使用时,无需手动转换所有内部包含。
标签: python-3.x python-2.7 python-import