【问题标题】:Python does not detect .pyc filesPython 不检测 .pyc 文件
【发布时间】:2012-07-25 11:13:48
【问题描述】:

我正在使用 Python 3.2(用于构建和执行),这是我的问题。

我打算使用以下设置发布我的 python 应用程序:

有一个主脚本(比如Main.py),它正在使用一个编译模块,比如Module1.pyc)。准确的说,目录结构是:

.\Main.py
.\__pycache__\Module1.cpython-32.pyc

当我使用python解释器运行主脚本时,找不到模块并出现以下错误:

Traceback (most recent call last):
  File "Main.py", line 10, in <module>
    import Module1
ImportError: No module named Module1

请注意,我已将当前目录添加到PYTHONPATH 环境变量中,并且是sys.path 的一部分。此外,还添加了内部__pycache__ 目录,并且在sys.path 中可见。

不确定为什么找不到 Module1。我猜,这可能是因为不同的文件名 - Module1.cpython-32.pyc?但是,这就是 Python 3.2 解释器生成它的方式。

【问题讨论】:

  • 确保您的文件名相同。您最初声明模块名称为Module1,并从您的目录结构中显示。然后你导入Module 并谈论一个不同的文件名。所以很难知道是你输入错误的模块名称还是它实际上不正确。
  • 抱歉,这只是一个错字。文件名一致。

标签: python import pyc


【解决方案1】:

看看PEP-3147。他们描述了 python-lookup 机制的工作原理。

所以在你的具体情况下:将文件 Module1.pyc 直接放在根文件夹中。

【讨论】:

  • 尝试将 Module.cpython-32.pyc 复制到同一个文件夹,但又失败了。现在,因为文件名有'cpython-32'。作为其中的一部分。如果我将文件重命名为 Module.pyc,它就像一个魅力。
  • 虽然这只是解决了问题,但它还需要重命名 pyc 文件的步骤。有没有办法控制创建的 pyc 文件名?
  • 看看模块compileall,这可能就是你要找的... (compileall.compile_dir)
【解决方案2】:

如下所述,两个步骤解决了该问题: 第 1 步:将 Module.cpython-32.pyc 文件从 .__pycache__ 目录复制到 .\ 第 2 步:将文件重命名为 Module.pyc

PS:感谢 gecco 分享细节。

【讨论】:

  • 提示:您的答案没有回答您的问题(为什么找不到 pyc):您的答案可能会被严重的 SO 用户否决...
  • @gecco,有两个部分可以解决这个问题,我在上面已经提到过。除非这两个步骤都执行,否则它不起作用。您共享的流程图与第 1 步有关。因此,不知道为什么这应该被否决。因为,我刚刚尝试过,发现需要两个步骤才能使其正常工作
  • 据我在你的问题中看到的,你没有问过如何从./__pycache__/Module.cpython-32.py./Module.pyc。您问为什么它不起作用以及如何解决它:我的回答中提供了两个答案...
猜你喜欢
  • 1970-01-01
  • 2018-01-21
  • 1970-01-01
  • 2021-06-07
  • 1970-01-01
  • 2018-08-23
  • 2019-06-08
  • 1970-01-01
  • 2020-02-24
相关资源
最近更新 更多