【问题标题】:Is it possible to import a compiled python file?是否可以导入已编译的 python 文件?
【发布时间】:2012-03-28 18:02:32
【问题描述】:

我似乎不知道如何将已编译的 .pyc 模块导入到我的代码中,以便可以在我的主脚本中使用它。这甚至可能吗?

【问题讨论】:

标签: python import module compiled


【解决方案1】:

如果有 foo.pyc,无论 foo.py 是否存在,import foo 都会自动使用 foo.pyc

(如果 foo.py 较新,将使用它)

http://docs.python.org/tutorial/modules.html

【讨论】:

  • Import 在解释器 (IPython) 中对我不起作用。我在脚本中对其进行了测试,并且可以正常工作。可以在解释器中完成吗?
  • 没关系。发现问题,我在错误的工作目录中。感谢您的帮助。
【解决方案2】:

简而言之,要仅导入 Python 编译文件(例如 module.pyc),只需将其放在与源相同的目录中(例如 module.py ) 将是,并确保那里没有没有相应的源文件(在我们的示例中为module.py)。然后通常的import module 将无缝运行。

如果与编译文件在同一目录下有源文件,Python 将使用 __pycache__ 目录中的编译文件,如果不存在则从源重新编译。

如果您删除源文件而不在同一目录中放置“.pyc”,即使编译后的文件存在于__pycache__ 目录中,导入也会失败。另请注意,__pycache__ 下的文件遵循不同的命名约定。如果你复制它们,请确保它们被重命名,以便它与源文件具有相同的名称,除了扩展名必须是“pyc”而不是“py”。

在 PEP 3147 中有一个很好的 flow chart 链接自 documentation

【讨论】:

    【解决方案3】:

    使用不带扩展的导入。 Python 会查看文件是否已更改,否则将使用之前创建的 pyc 文件。

    但请注意,如果您真的想要更高的性能,我建议您使用PyPy,这比标准的 CPython 实现要快得多。 (但请注意,它仍然是 Python 2)

    【讨论】:

    • 这好像是个广告; OP 没有询问速度,并且是新手,因此不太可能专注于速度。
    • @sondra.kinsey 当有人挖出我的旧 SA 答案之一,我又读了一遍,我就像 D'oh 一样,总是很有趣。你是对的,这并不能完全回答原始问题,但要求加载编译的代码我想我只是想根据我对 OP 意图的怀疑提出一个替代方案。
    【解决方案4】:

    import module

    如果有 .py 源文件,如果它是最新的,核心将自动使用 .pyc

    如果没有源,python会自动导入.pyc

    “Compiled” Python files.

    【讨论】:

    • import filename.py 不起作用。您没有在 import 语句中指定 .py 后缀。
    • 我如何从不同的位置导入它?
    • help("import")
    • 良好的文档链接。它与“如果没有源,python 将自动导入 .pyc”相矛盾。最后(第二种情况)声明:“Python 在两种情况下不检查缓存。首先,它总是重新编译并且不存储直接从命令行加载的模块的结果。其次,它不检查如果没有源模块,则缓存。"
    【解决方案5】:

    是的,但请注意,请确保使用“-O”选项启动 python!以我个人的经验,如果您只有 .pyc 或 .pyo 文件,则在没有标志的情况下运行“python.exe”并尝试导入将失败,但是运行 python.exe -O 然后尝试正常导入应该可以.

    【讨论】:

      【解决方案6】:

      导入时使用pyc文件名,python会自动加载。

      【讨论】:

        猜你喜欢
        • 2011-07-14
        • 1970-01-01
        • 1970-01-01
        • 2016-11-28
        • 2017-02-04
        • 1970-01-01
        • 2012-09-04
        • 2014-11-27
        相关资源
        最近更新 更多