我的项目有许多click
函数,这些函数通过以下方式导入我的入口点:
import package.module as _
但是,我正在实现一个plugins
文件夹,该文件夹允许用户创建的代码挂接到同一实用程序。 package/plugins/__init__.py
正在动态填充其__all__
,因此我可以from package.plugins import *
。
不过,我并不特别希望所有这些名称污染我的名称空间,我只是将import用作其副作用。有办法import * as _
吗?
答案 0 :(得分:1)
如果您不希望模块的内容污染程序,则只需导入模块即可:
import module
或导入为:
import module as name
import *
用于您不希望模块位于其自己的名称空间中的时间。这样做:
from module import *
自动将module
中的所有内容放入导入所在的范围(通常是全局范围)。 from module import *
是from module import something
的一种特殊类型,它仅将指定的内容导入程序。
请注意,可以使用与普通模块相同的方式导入子模块,即import os.path as somemodule
是合法的。
答案 1 :(得分:1)
如果您将import *
用于import *
特有的副作用...那么这很奇怪,但是您可以将__import__
与{{ 1}}来实现这些副作用而不会污染名称空间:
fromlist=['*']
这将自动加载软件包__import__('package', fromlist=['*'])
列表中的所有子模块,这与普通的__all__
不同。