【问题标题】:Why is .pyc file created sometimes in same directory and sometimes in __pycache__ subdirectory?为什么 .pyc 文件有时在同一目录中创建,有时在 __pycache__ 子目录中创建?
【发布时间】:2013-08-25 07:31:51
【问题描述】:

我使用的是 Windows 7 并安装了 Python 2.7.5 和 3.3.2。我的path 环境变量设置为

C:\Program Files\Intel\WiFi\bin\;C:\Program Files\Common Files\Intel\WirelessCommon\;C:\python27;C:\Python33\Scripts

当我将任何 Python 模块导入另一个模块时,会创建一个 .pyc 文件。它的创建位置取决于是调用 Python2 还是 Python3 来运行它。

  • 当我双击模块时,.pyc 文件会在同一目录中创建
  • 当我通过 IDLE 编辑然后运行它时,文件会在子目录中创建。
  • 如果我在顶部添加#! Python3,然后双击会在子目录中生成.pyc 文件。

我知道这是因为 Python2 和 Python3 决定管理字节编译代码的方式不同。

我目前专注于 Python3,并希望仅在子目录中创建文件。

我尝试编辑 path 变量以将 Python3 放在 Python 2 之前,以便调用 Python3 而不是 Python2。即使在我双击未发生的 Python 脚本并在同一目录中创建字节编译代码时更改了它。

所以Python2是用来双击运行Python脚本的。是什么导致了这种行为,如何确保在不卸载 Python2 的情况下调用 Python3 而不是 Python2?

【问题讨论】:

    标签: python python-2.7 python-3.x


    【解决方案1】:

    Python 3 改变了字节码 (.pyc) 文件的存储方式。 Python 2 使用将它们放在同一个目录中的约定,但是对于 Python 3,开发人员决定通过将它们全部放在一个单独的目录中来减少混乱。这也使得对 CPython 以外的 Python 实现的支持更加容易,因为每个实现都可以在 __pycache__ 目录中拥有自己的 .pyc 文件,而不是覆盖其他实现中的文件。

    【讨论】:

    • 那么为什么在我的情况下双击在同一目录中生成编译文件,除非我在顶部使用#! python3
    • @AshwiniChaudhary 但是a sub-heading 声明我可以在 Windows 上使用 shebang。我也在 comp.lang.python 上问过这个问题,那里的人告诉我我可以使用它。
    • @AseemBansal 你安装py launcher了吗?
    • @AshwiniChaudhary 不,我没有。我有 Python2.7 和 Python3.3 的标准 Python 安装
    • 变化发生在 Python 3.2 中,具体来说,不是在整个 Python 3 中。
    猜你喜欢
    • 1970-01-01
    • 2013-06-21
    • 2013-11-07
    • 2011-04-01
    • 1970-01-01
    • 2019-11-03
    • 2021-09-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多