Questions tagged «python-import»

有关在Python中导入模块的问题

7
如何测试或模拟“如果__name__ =='__main__'”内容
说我有一个包含以下内容的模块: def main(): pass if __name__ == "__main__": main() 我想为下半部分编写一个单元测试(我想实现100%的覆盖率)。我发现执行导入/设置机制的内置的runpy模块__name__,但无法弄清楚如何模拟或检查main()函数是否被调用。 到目前为止,这是我尝试过的: import runpy import mock @mock.patch('foobar.main') def test_main(self, main): runpy.run_module('foobar', run_name='__main__') main.assert_called_once_with()

3
用于相对进口的python包装
首先,很抱歉,我知道相对进口存在很多疑问,但我没有找到解决办法。如果可能的话,我想使用以下目录布局: myClass/ __init__.py test/ demo.py benchmark.py specs.py src/ __init__.py myClass.py 现在我的问题是: 包中的测试文件如何正确导入myClass.py? 假设您将myClass作为libs / myClass或include / myClass中的子模块,则如何从外部导入包? 到目前为止,我找不到适合的解决方案。据我了解Guido的决定,应该可以这样做,from ..src import myClass但这会出错: ValueError: Attempted relative import in non-package 看起来没有将myClass视为包。阅读文档: __init__.py文件是使Python将目录视为包含包的必需文件。 似乎我缺少指定软件包脚本位置的内容,我应该使用.pth吗?

5
用Python导入软件包
我可能会缺少一些明显的东西,但是无论如何: 当您像os在python中那样导入包时,您可以直接使用任何子模块/子包。例如,这有效: >>> import os >>> os.path.abspath(...) 但是我有自己的软件包,其结构如下: FooPackage/ __init__.py foo.py 并且这里相同的逻辑不起作用: >>> import FooPackage >>> FooPackage.foo AttributeError: 'module' object has no attribute 'foo' 我究竟做错了什么?

3
由于旧的解释器版本,如何妥善处理失败的将来功能(__future__)导入?
您如何优雅地处理将来失败的功能导入?如果用户使用Python 2.5运行并且模块中的第一条语句是: from __future__ import print_function 针对Python 2.5编译此模块将失败,并显示以下内容: File "__init__.py", line 1 from __future__ import print_function SyntaxError: future feature print_function is not defined 我想通知用户他们需要使用Python> = 2.6重新运行该程序,并可能提供一些有关如何执行此操作的说明。但是,引用PEP 236: 只能在future_statement之前出现的行是: 模块文档字符串(如果有)。 评论。 空白行。 其他future_statement。 所以我不能做这样的事情: import __future__ if hasattr(__future__, 'print_function'): from __future__ import print_function else: raise ImportError('Python >= 2.6 is required') 因为它产生: …

5
“导入模块”的编码样式是否比“来自模块导入功能”的编码样式更好?
让from module import function被称为FMIF的编码风格。 让import module被称为IM的编码风格。 让from package import module被称为FPIM的编码风格。 为什么IM + FPIM被认为比FMIF更好的编码风格?(有关此问题的启发,请参阅此帖子。) 以下是一些使我更喜欢FMIF而非IM的条件: 代码的简短性:它使我可以使用较短的函数名称,从而有助于遵循每行80列的约定。 可读性:chisquare(...)比更具可读性 scipy.stats.stats.chisquare(...)。尽管这是一个主观标准,但我认为大多数人都会同意。 缓解重定向:如果我使用FMIF出于某种原因,在一段时间后要重定向蟒蛇定义function从alt_module不是module我需要改变只有一条线路:from alt_module import function。如果要使用IM,则需要更改许多代码行。 我意识到FPIM可以使前两个问题无效,但是第三个问题又如何呢? 我对IM + FPIM可能比FMIF更好的所有原因都感兴趣,但是特别是,我对这里提到的以下几点感兴趣: IM的优点: 易于在测试中进行模拟/注入。(尽管我最近对模拟不是很熟悉,但是我最近才了解该术语的含义。在这里,您可以显示代码来证明IM比FMIF更好吗?) 通过重新定义一些条目,模块可以灵活更改的功能。(我一定会误会,因为这似乎是FMIF相对于IM的优势。请参见上面支持FMIF的第三个理由。) 有关数据序列化和恢复的可预测和可控制的行为。(我真的不明白IM或FMIF的选择如何影响此问题。请详细说明。) 我知道FMIF会“污染我的名称空间”,但是除了听起来像是一个否定性的短语外,我不理解这会如何以任何具体的方式伤害代码。 PS。在撰写此问题时,我收到警告,说该问题看起来很主观,很可能已被关闭。请不要关闭它。我并不是在寻找主观意见,而是要寻找IM + FPIM比FMIF更好的具体编码情况。 非常感谢。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.