如何为 Python 中的导入设置别名?

How can I set up an alias for imports in Python?

我希望我的项目在两种不同的情况下工作。它应该作为一个独立的库工作,但也可以作为一个更大项目的子包。主要用例是独立库的用例,其内部导入应采用

形式
from my_library import sub_package

将代码用作较大项目的子包时,这些导入不起作用,因为没有全局名称 my_library。相反,我将不得不使用相对或绝对导入,例如

from large_project.my_library import sub_package

假设我按照第一个示例中所示编写了我的库。当 运行 作为大型项目的一部分自动调整导入路径时,如何覆盖导入行为?

你没有太多选择。

如果您想在任何地方引用 my_library.py,有 2 种方法(据我所知)可以完成类似的工作。


1:添加系统路径。就像您通过 pip 安装的模块一样。 pip 模块安装在 /Python/Scripts 中。您可以添加新路径或简单地将 my_library.py 放入路径之一。对于添加,在 Computer(right-click)-> Properties -> Environment Variable -> Choose Path and Click Edit

(虽然您可能不想使用它。)


2:正在更改 __init__.py,但仍然至少必须在 my_library.py.

中添加一行

例如,

/Directory
   /large_project
      -__init__.py #call this sub_init
      -my_library.py
   -__init__.py #call this main_init, this fake
   -main.py

在main_init,

import sys
sys.path.append('\Directory\large_project')

由于执行main.py的时候main_init没有执行(这是假的),所以在main.py

import __init__
from my_library import sub_package

但是你也可以把这个main_init作为库的开始,比如声明__all__

感谢@MatrixTai 将包的父目录添加到模块路径的建议,我想出了这个动态解决方案。在my_library/__init__.py的顶部:

# Make package global even if used as a sub package to enable short imports.
import os
import sys
sys.path.append(os.path.dirname(os.path.dirname(__file__)))

我们必须在此处向上导航两个目录,从 my_library/__init__.pymy_library 并从那里到其父方向,导入将在其中找到库。