如何.py
在 Python 3.3+中 导入任意python源文件(其文件名可以包含任何字符,但并不总是以结尾)?
我使用imp.load_module
如下:
>>> import imp
>>> path = '/tmp/a-b.txt'
>>> with open(path, 'U') as f:
... mod = imp.load_module('a_b', f, path, ('.py', 'U', imp.PY_SOURCE))
...
>>> mod
<module 'a_b' from '/tmp/a-b.txt'>
它仍然可以在Python 3.3中使用,但是根据imp.load_module
文档,它已被弃用:
从版本3.3开始不推荐使用 :不需要,因为应该使用装载程序来装载模块,并且不建议使用find_module()。
和imp
模块文档建议使用importlib
:
注意 新程序应使用importlib而不是此模块。
在不使用不推荐使用的imp.load_module
功能的情况下,在Python 3.3+中加载任意python源文件的正确方法是什么?
从importlib
测试代码中找到了解决方案。
使用importlib.machinery.SourceFileLoader:
>>> import importlib.machinery
>>> loader = importlib.machinery.SourceFileLoader('a_b', '/tmp/a-b.txt')
>>> mod = loader.load_module()
>>> mod
<module 'a_b' from '/tmp/a-b.txt'>
注意 :仅适用于 Python 3.3+ 。
*Loader.load_module
从Python
3.4开始不推荐使用
*UPDATE
。Loader.exec_module
改为使用:
>>> import types
>>> import importlib.machinery
>>> loader = importlib.machinery.SourceFileLoader('a_b', '/tmp/a-b.txt')
>>> mod = types.ModuleType(loader.name)
>>> loader.exec_module(mod)
>>> mod
<module 'a_b'>
>>> import importlib.machinery
>>> import importlib.util
>>> loader = importlib.machinery.SourceFileLoader('a_b', '/tmp/a-b.txt')
>>> spec = importlib.util.spec_from_loader(loader.name, loader)
>>> mod = importlib.util.module_from_spec(spec)
>>> loader.exec_module(mod)
>>> mod
<module 'a_b' from '/tmp/a-b.txt'>
问题内容: 我正在导入许多不同的脚本,因此在文件的顶部,它会被导入语句弄得乱七八糟,即: 有没有办法将所有这些都移动到其他地方,然后我要做的就是导入该文件,所以它只是一个干净的导入? 问题答案: 当然有;只需在主文件所在的目录中创建一个名为的文件,然后将导入文件放置在该目录中即可。然后,您可以简单地在主脚本中使用。
问题内容: 在Python 3.5中,添加了类型注释(请参见此处)。 有没有一种方法来定义递归类型注释,例如用于树状结构? 在上面,注释似乎无效。运行代码会导致以下错误: 问题答案: 您可以使用PEP 484中定义的正向引用 通常发生这种情况的情况是容器类的定义,其中定义的类出现在某些方法的签名中。例如,以下代码(简单的二进制树实现的开始)不起作用: 为了解决这个问题,我们写: 可以将字符串文字用
问题内容: 我想让我的两个python文件互相导入一些方法。这似乎给了我导入错误。 例: file_A.py: file_B.py: 我之所以这样做,是因为我想以一种对我来说直观的方式来组织项目,而不是按照对编译器有意义的方式来组织项目。 有没有办法做到这一点? 谢谢! 问题答案: 不要在其他模块中直接使用名称。 file_A.py file_B.py
问题内容: 我尝试导入.txt文件以在文本框中显示文本。 我的代码: 但我在控制台中看到:/static/media/sample.f2e86101.txt 这是怎么了? 问题答案: 我已经解决了我的问题。
我正在使用openpyxl导入/导出xlsx文件。 但是我不能导入我用openpyxl导出的文件。 我必须在Excel中打开导出的xlsx文件,更改导入的xlsx文件的一些值并保存它(它的大小也会改变(例如:从148 Ko到180 Ko)。然后我可以用openpyxl导入它。 我认为,有一个问题,在出口,因为后保存手动导入作品。 谢谢
我想将一些代码从python 2移植到python 3,但由于导入错误而失败。因此,我试图通过创建2个基本的python文件来测试来摆脱移植本身并专注于导入。但是,我甚至无法让它们起作用。 所以我有2个文件 test.py: 和test2.py: 然而,结果是Py魅力中的这个错误: ImportError:无法从“__main__”(C:/Users/Username/test2.py)导入名称“
我有一些*.pyd文件是在使用Python 3.7.9版本的计算机上创建的。我想在Python3.8.8的计算机上使用它们。有什么办法可以做到这一点吗?再者,有没有什么方法可以创建这些*.pyd文件(或者类似的东西),使它们与其他Python版本兼容呢?
问题内容: 我有以下文件夹结构。 我想从位于另一个Python文件中的导入一些功能 我试过了 和其他一些尝试,但到目前为止,我无法正确导入。我怎样才能做到这一点? 问题答案: 默认情况下,你不能这样做。导入文件时,Python仅搜索当前目录,入口点脚本运行所在的目录,并且包括诸如软件包安装目录之类的位置(实际上比这稍微复杂一点,但这涵盖了大多数情况) 。 但是,你可以在运行时添加到Python路径