PyCharm在哪里存储编译文件?

时间:2018-04-13 15:35:04

标签: python pycharm

我是PyCharm / Python的新手,无法弄清楚IDE存储编译的python * .pyc文件的位置。

来自IntelliJ世界,很奇怪我没有看到任何菜单选项来重新构建项目或构建单个文件。

我在搜索项目目录时也找不到任何pyc文件,所以基本上,我不知道是否发生了成功的编译,尽管GitHub导入的项目没有错误。

我可以在这做什么?

2 个答案:

答案 0 :(得分:6)

因为大多数Python实现都是解释而不是编译,所以在运行代码时会发生编译步骤。这就是PyCharm UI具有突出的“运行”按钮(▶️)但没有编译按钮的原因。

对于CPython来说,确实有一个编译步骤,它从Python代码编译到字节码,但这是一个实现细节。 CPython 3将其缓存的编译结果存储在名为.pyc的目录中的__pycache__文件中。导入模块时会自动生成这些文件(使用import module将生成module.pyc文件),但在正常程序运行时则不会生成。

最后,根据@ shmee的评论,可以使用py_compile模块编译源文件,但我应该强调通常不会这样做或不必要。

现在,如果您担心检查您的代码是否正确,那么在解释语言世界中,我们更依赖于测试。我建议您调查代码的测试(使用Pytest和PyCharm中的优秀test integration)。

答案 1 :(得分:2)

让我先谈谈术语:

  • Python 是一种编程语言。它"只是" programming language specification

  • CPython 是Python语言的参考实现。它实际上只是几种不同的Python 解释器之一。 CPython本身可以工作(让它称之为实现细节),通过将导入的Python文件/模块中的代码转换(但也可以说是编译)到字节码,然后执行该字节码。它实际上将翻译作为.pyc文件保存在file的文件夹中,以使后续导入更快,但这是CPython特有的,也可以是disabled

  • PyCharm integrated development environment。但是,它需要"Configure a Python Interpreter"来运行Python代码。

这意味着PyCharm不负责创建.pyc个文件。如果您配置了非CPython解释器或使用环境变量来禁用pyc文件创建,那么就不会有任何pyc文件。

但是如果您在PyCharm中使用了适当的CPython解释器,它将为您成功导入的文件/模块创建.pyc个文件。这意味着您实际上必须导入或以其他方式运行项目中的Python文件以获取.pyc文件。

实际上,Python文档包含有关"compiled" Python files

的说明
  

为了加速加载模块,Python将每个模块的编译版本缓存在名为__pycache__的{​​{1}}目录中,其中版本对编译文件的格式进行编码;它通常包含Python版本号。例如,在CPython版本3.3中,spam.py的编译版本将缓存为module.version.pyc。这种命名约定允许来自不同版本和不同版本的Python的已编译模块共存。

     

Python根据编译版本检查源的修改日期,以查看它是否已过期并需要重新编译。这是一个完全自动化的过程。此外,编译后的模块与平台无关,因此可以在具有不同体系结构的系统之间共享相同的库。

     

Python在两种情况下不检查缓存。首先,它总是重新编译并且不存储直接从命令行加载的模块的结果。其次,如果没有源模块,它不会检查缓存。要支持非源(仅编译)分发,已编译的模块必须位于源目录中,并且不得有源模块。

     

专家提示:

     
      
  • 您可以使用Python命令上的__pycache__/spam.cpython-33.pyc-O开关来减小已编译模块的大小。 -OO开关删除断言语句,-O开关删除断言语句和 doc 字符串。由于某些程序可能依赖于这些程序可用,因此如果您知道自己在做什么,则应该只使用此选项。 “优化”模块具有-OO标记,通常较小。未来版本可能会改变优化的效果。
  •   
  • opt-文件读取程序时,程序运行速度不比从.pyc文件读取时快得多; .py文件唯一更快的是加载它们的速度。
  •   
  • 模块compileall可以为目录中的所有模块创建.pyc文件。
  •   
  • 此过程有更多详细信息,包括决策的流程图,在PEP 3147中。
  •