如何为 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__.py
到 my_library
并从那里到其父方向,导入将在其中找到库。
我希望我的项目在两种不同的情况下工作。它应该作为一个独立的库工作,但也可以作为一个更大项目的子包。主要用例是独立库的用例,其内部导入应采用
形式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__.py
到 my_library
并从那里到其父方向,导入将在其中找到库。