问题标签 [python-import]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
35 回答
1209572 浏览

python - 如何在给定完整路径的情况下导入模块?

给定完整路径,如何加载 Python 模块?

请注意,该文件可以位于文件系统中的任何位置,因为它是一个配置选项。

0 投票
18 回答
366598 浏览

python - 如何在 Python 中进行相对导入?

想象一下这个目录结构:

我正在编码mod1,我需要从mod2. 我该怎么做?

我试过from ..sub2 import mod2了,但我得到了一个“尝试在非包中进行相对导入”。

我四处搜索,但只发现“sys.path操纵”黑客。没有干净的方法吗?


编辑:我所有__init__.py的目前都是空的

Edit2:我正在尝试这样做,因为 sub2 包含跨子包(,等)共享的sub1subX

Edit3:我正在寻找的行为与PEP 366中描述的行为相同(感谢 John B)

0 投票
5 回答
12196 浏览

python - 如何使用 Python 的 __import__ 函数执行相当于“import * from module”的操作?

给定一个带有模块名称的字符串,你如何导入模块中的所有内容,就好像你调用了:

即给定字符串 S="module",如何获得以下等效项:

这似乎没有按预期执行(因为它不导入任何东西)。

0 投票
5 回答
4497 浏览

python - Python,单元测试和模拟导入

我在一个项目中,我们开始重构一些庞大的代码库。立即出现的一个问题是每个文件都会导入许多其他文件。我如何以优雅的方式在我的单元测试中模拟它,而无需更改实际代码,以便我可以开始编写单元测试?

例如:包含我要测试的功能的文件导入了其他十个文件,这些文件是我们软件的一部分,而不是 python 核心库。

我希望能够尽可能单独地运行单元测试,现在我只测试不依赖于正在导入的文件中的东西的函数。

感谢所有的答案。

从一开始我真的不知道我想做什么,但现在我想我知道了。

问题是,由于某些第三方自动魔术,某些导入仅在整个应用程序运行时才有可能。所以我不得不在我用 sys.path 指出的目录中为这些模块创建一些存根

现在我可以在我的单元测试文件中导入包含我想要为其编写测试的函数的文件,而不会抱怨缺少模块。

0 投票
9 回答
2913 浏览

python - 'from X import a' 与 'import X; Xa'

我见过一些 Python 程序员相当一致地使用以下风格(我们称之为风格 1):

为了支持这种风格,您可以引用“显式优于隐式”的格言。我见过其他程序员使用这种风格(风格 2):

我在样式 2 中看到的主要好处是可维护性——尤其是对于鸭子类型的理想,我可能想将 some_module 换成 some_other_module。我也觉得风格 2 以“可读性很重要”的格言赢得了积分。尽管我倾向于不同意,但人们总是可以争辩说,在使用第一种样式时,搜索和替换同样是一个不错的选择。

附录:有人指出,您可以使用样式 1as来解决从some_moduleto的切换some_other_module。我忘了提到,决定some_identifier当前模块中实现也很常见,这使得创建等效some_module容器有点尴尬。

0 投票
10 回答
51773 浏览

python - Python 导入有哪些好的经验法则?

我对在 Python 中导入模块的多种方式感到有些困惑。

我一直在阅读有关范围和名称空间的信息,但我想就什么是最佳策略、在什么情况下以及为什么要提供一些实用的建议。导入应该发生在模块级别还是方法/函数级别?在__init__.py模块代码本身中还是在模块代码中?

“ Python 包 - 按类导入,而不是文件”并没有真正回答我的问题,尽管它显然是相关的。

0 投票
6 回答
19222 浏览

python - Python 的 __import__ 不能按预期工作

当使用__import__带点的名称时,例如: somepackage.somemodule,返回的模块不是somemodule,返回的任何内容似乎大部分都是空的!这里发生了什么?

0 投票
22 回答
922408 浏览

python - 从相对路径导入模块

如何在给定相对路径的情况下导入 Python 模块?

例如,如果dirFoocontains Foo.pyanddirBardirBarcontains Bar.py,我该如何Bar.py导入Foo.py

这是一个视觉表示:

Foo希望包括Bar,但重组文件夹层次结构不是一种选择。

0 投票
6 回答
23315 浏览

python - python 是否会在多次导入模块时优化模块?

如果您的代码的某个子模块加载了一个大模块,那么从该命名空间引用该模块而不是再次导入它有什么好处?

例如:我有一个模块MyLib,它广泛使用了ReallyBigLib。如果我有导入 MyLib 的代码,我应该像这样挖掘模块吗

要不就

0 投票
10 回答
362893 浏览

python - 如何以字符串形式导入模块?

我正在编写一个将命令作为参数的 Python 应用程序,例如:

我希望应用程序是可扩展的,也就是说,能够添加实现新命令的新模块,而无需更改主应用程序源。这棵树看起来像:

所以我希望应用程序在运行时找到可用的命令模块并执行适当的命令模块。

Python 定义了一个__import__函数,它接受一个字符串作为模块名称:

__import__(name, globals=None, locals=None, fromlist=(), level=0)

该函数导入模块名称,可能使用给定的全局变量和局部变量来确定如何在包上下文中解释名称。fromlist 给出了应该从 name 给定的模块导入的对象或子模块的名称。

来源:https : //docs.python.org/3/library/functions.html#import

所以目前我有类似的东西:

这工作得很好,我只是想知道是否可能有一种更惯用的方式来完成我们用这段代码所做的事情。

请注意,我特别不想使用鸡蛋或扩展点。这不是一个开源项目,我不希望有“插件”。重点是简化主应用程序代码,并且无需在每次添加新命令模块时对其进行修改。