<tfoot id='kA3Z5'></tfoot>

      • <bdo id='kA3Z5'></bdo><ul id='kA3Z5'></ul>
      <legend id='kA3Z5'><style id='kA3Z5'><dir id='kA3Z5'><q id='kA3Z5'></q></dir></style></legend>

    1. <small id='kA3Z5'></small><noframes id='kA3Z5'>

        <i id='kA3Z5'><tr id='kA3Z5'><dt id='kA3Z5'><q id='kA3Z5'><span id='kA3Z5'><b id='kA3Z5'><form id='kA3Z5'><ins id='kA3Z5'></ins><ul id='kA3Z5'></ul><sub id='kA3Z5'></sub></form><legend id='kA3Z5'></legend><bdo id='kA3Z5'><pre id='kA3Z5'><center id='kA3Z5'></center></pre></bdo></b><th id='kA3Z5'></th></span></q></dt></tr></i><div id='kA3Z5'><tfoot id='kA3Z5'></tfoot><dl id='kA3Z5'><fieldset id='kA3Z5'></fieldset></dl></div>

      1. 导入任意 python 源文件.(Python 3.3+)

        时间:2024-04-21

        1. <i id='qrX8W'><tr id='qrX8W'><dt id='qrX8W'><q id='qrX8W'><span id='qrX8W'><b id='qrX8W'><form id='qrX8W'><ins id='qrX8W'></ins><ul id='qrX8W'></ul><sub id='qrX8W'></sub></form><legend id='qrX8W'></legend><bdo id='qrX8W'><pre id='qrX8W'><center id='qrX8W'></center></pre></bdo></b><th id='qrX8W'></th></span></q></dt></tr></i><div id='qrX8W'><tfoot id='qrX8W'></tfoot><dl id='qrX8W'><fieldset id='qrX8W'></fieldset></dl></div>
            <tbody id='qrX8W'></tbody>

              <bdo id='qrX8W'></bdo><ul id='qrX8W'></ul>

                  <small id='qrX8W'></small><noframes id='qrX8W'>

                  <legend id='qrX8W'><style id='qrX8W'><dir id='qrX8W'><q id='qrX8W'></q></dir></style></legend><tfoot id='qrX8W'></tfoot>

                • 本文介绍了导入任意 python 源文件.(Python 3.3+)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                  问题描述

                  如何在 Python 3.3+ 中导入任意 python 源文件(其文件名可以包含任何字符,并且并不总是以 .py 结尾)?p>

                  我使用 imp.load_module 如下:

                  >>>进口小鬼>>>路径 = '/tmp/a-b.txt'>>>使用 open(path, 'U') 作为 f:... mod = imp.load_module('a_b', f, path, ('.py', 'U', imp.PY_SOURCE))...>>>模组<来自'/tmp/a-b.txt'的模块'a_b'>

                  它在 Python 3.3 中仍然有效,但根据 imp.load_module 文档,它已被弃用:

                  <块引用>

                  自 3.3 版起已弃用:不需要,因为应该使用加载器加载模块和 find_module() 已弃用.

                  imp模块文档推荐使用importlib:

                  <块引用>

                  注意新程序应该使用 importlib 而不是这个模块.

                  在不使用已弃用的 imp.load_module 函数的情况下,在 Python 3.3+ 中加载任意 python 源文件的正确方法是什么?

                  解决方案

                  importlib 测试代码.

                  使用 importlib.machinery.SourceFileLoader:

                  >>>导入 importlib.machinery>>>loader = importlib.machinery.SourceFileLoader('a_b', '/tmp/a-b.txt')>>>mod = loader.load_module()>>>模组<来自'/tmp/a-b.txt'的模块'a_b'>

                  注意:仅适用于Python 3.3+.

                  更新 Loader.load_module 自 Python 3.4 起已弃用.使用 Loader.exec_module 改为:

                  >>>导入类型>>>导入 importlib.machinery>>>loader = importlib.machinery.SourceFileLoader('a_b', '/tmp/a-b.txt')>>>mod = types.ModuleType(loader.name)>>>loader.exec_module(mod)>>>模组<模块'a_b'>

                  <小时>

                  >>>导入 importlib.machinery>>>导入 importlib.util>>>loader = importlib.machinery.SourceFileLoader('a_b', '/tmp/a-b.txt')>>>规格 = importlib.util.spec_from_loader(loader.name, loader)>>>mod = importlib.util.module_from_spec(spec)>>>loader.exec_module(mod)>>>模组<来自'/tmp/a-b.txt'的模块'a_b'>

                  How can I import an arbitrary python source file (whose filename could contain any characters, and does not always ends with .py) in Python 3.3+?

                  I used imp.load_module as follows:

                  >>> 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'>
                  

                  It still works in Python 3.3, but according to imp.load_module documentation, it is deprecated:

                  Deprecated since version 3.3: Unneeded as loaders should be used to load modules and find_module() is deprecated.

                  and imp module documentation recommends to use importlib:

                  Note New programs should use importlib rather than this module.

                  What is the proper way to load an arbitrary python source file in Python 3.3+ without using the deprecated imp.load_module function?

                  解决方案

                  Found a solution from importlib test code.

                  Using 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'>
                  

                  NOTE: only works in Python 3.3+.

                  UPDATE Loader.load_module is deprecated since Python 3.4. Use Loader.exec_module instead:

                  >>> 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 源文件.(Python 3.3+)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                  上一篇:使用 pickle.dump - TypeError: must be str, not bytes 下一篇:重新加载模块给出 NameError: name 'reload' is not defined

                  相关文章

                  1. <small id='l4EUJ'></small><noframes id='l4EUJ'>

                      <bdo id='l4EUJ'></bdo><ul id='l4EUJ'></ul>
                    <i id='l4EUJ'><tr id='l4EUJ'><dt id='l4EUJ'><q id='l4EUJ'><span id='l4EUJ'><b id='l4EUJ'><form id='l4EUJ'><ins id='l4EUJ'></ins><ul id='l4EUJ'></ul><sub id='l4EUJ'></sub></form><legend id='l4EUJ'></legend><bdo id='l4EUJ'><pre id='l4EUJ'><center id='l4EUJ'></center></pre></bdo></b><th id='l4EUJ'></th></span></q></dt></tr></i><div id='l4EUJ'><tfoot id='l4EUJ'></tfoot><dl id='l4EUJ'><fieldset id='l4EUJ'></fieldset></dl></div>

                    1. <legend id='l4EUJ'><style id='l4EUJ'><dir id='l4EUJ'><q id='l4EUJ'></q></dir></style></legend>
                      <tfoot id='l4EUJ'></tfoot>