Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否可以导入已编译的python文件?_Python_Import_Module_Compiled - Fatal编程技术网

是否可以导入已编译的python文件?

是否可以导入已编译的python文件?,python,import,module,compiled,Python,Import,Module,Compiled,我似乎不知道如何将编译后的.pyc模块导入到代码中,以便在主脚本中使用它。这可能吗?导入模块 如果有一个.py源文件,内核将自动使用.pyc,如果它是最新的 如果没有源代码,python将自动导入.pyc .如果存在foo.pyc,无论foo.py是否存在,导入foo都将自动使用foo.pyc (如果foo.py较新,将使用它) 在导入中使用pyc文件名,python将自动加载它。使用导入而不使用扩展名。Python将查看文件是否已更改,如果未更改,则将使用先前创建的pyc文件 但是请注意,如果

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

导入模块

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

如果没有源代码,python将自动导入
.pyc


.

如果存在foo.pyc,无论foo.py是否存在,导入foo都将自动使用foo.pyc

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


在导入中使用pyc文件名,python将自动加载它。

使用导入而不使用扩展名。Python将查看文件是否已更改,如果未更改,则将使用先前创建的pyc文件


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

是的,但是请注意,一定要用“-O”选项启动Python!根据我个人的经验,如果您只有.pyc或.pyo文件,那么运行“python.exe”而不带标志并尝试导入将失败,但是运行python.exe-O然后尝试正常导入应该可以工作。

简而言之,仅导入python编译文件(例如module.pyc),只需将它放在源(例如module.py)所在的同一目录中,并确保那里没有源文件。然后,通常的
导入模块将无缝工作

如果源文件与编译后的文件位于同一目录中,Python将使用
\uuuuu pycache\uuuu
目录中的编译后的文件,或者从源文件重新编译(如果不存在)

如果删除源文件而不将“.pyc”放在同一目录中,则即使编译的文件存在于
\uuuu pycache\uuu
目录中,导入也将失败。还请注意,
\uuupycache\uu
下的文件遵循不同的命名约定。如果跨多个文件复制它们,请确保重命名它们,使其与源文件具有相同的名称,但扩展名必须是“pyc”而不是“py”


PEP 3147中有一个非常好的文件名链接。

导入文件名。py
不起作用。您没有在
import
语句中指定
.py
后缀。如何从不同位置导入它?
帮助(“导入”)
良好的文档链接。它与“如果没有源代码,python将自动导入.pyc”相矛盾“Python在两种情况下不检查缓存。首先,它总是重新编译并且不存储直接从命令行加载的模块的结果。其次,如果没有源模块,它不会检查缓存。“导入在解释器(IPython)中对我不起作用。”。我在脚本中测试了它,它成功了。可以在解释器中完成吗?没关系。发现了问题,我的工作目录错误。谢谢你的帮助。仅供参考。PyDev在导入pyc文件时有一个错误。这看起来像是一则广告;OP没有询问速度,是一个新手,因此不太可能关注速度。@sondra.kins嗯,当有人挖出我的一个旧SA答案,我又读了一遍,我觉得很有趣。你是对的,这并没有完全回答原来的问题,但要求加载编译代码,我想我只是想根据我对OPs意图的怀疑,提出一个替代方案。