从包导入*为_

时间:2018-12-14 20:30:57

标签: python python-3.x python-import

我的项目有许多click函数,这些函数通过以下方式导入我的入口点:

import package.module as _

但是,我正在实现一个plugins文件夹,该文件夹允许用户创建的代码挂接到同一实用程序。 package/plugins/__init__.py正在动态填充其__all__,因此我可以from package.plugins import *

不过,我并不特别希望所有这些名称污染我的名称空间,我只是将import用作其副作用。有办法import * as _吗?

2 个答案:

答案 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__不同。