Python不检测.pyc文件

问题描述:

我使用Python 3.2(用于构建和执行),这里是我的问题。Python不检测.pyc文件

我打算运输我用下面的设置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解释器如何生成它的。

+0

确保您的文件名是相同的。您最初声明模块名称为“Module1”,并从您的dir结构中显示。然后你导入'Module'并讨论不同的文件名。所以很难知道是否你错误地键入了模块名称或者它实际上是不正确的。 – 2012-07-25 11:49:13

+0

对不起,这只是一个错字。文件名是一致的。 – 2012-07-25 11:54:03

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

enter image description here

因此,在您的具体案例:在根文件夹直接把文件Module1.pyc。

+0

尝试将Module.cpython-32.pyc复制到同一个文件夹,但它又失败了。 现在,因为文件名有'cpython-32'。作为它的一部分。如果我将文件重命名为Module.pyc,它就像一个魅力。 – 2012-07-25 11:49:41

+0

虽然这只是解决了这个问题,但它还需要一步重命名pyc文件。 有没有办法控制创建的pyc文件名? – 2012-07-25 11:50:25

+0

看看模块'compileall',这可能是你正在寻找的东西......('compileall.compile_dir') – gecco 2012-07-25 11:52:56

如下所述,两个步骤解决了这个问题: 步骤1:在Module.cpython-32.pyc文件从.__ pycache__目录复制\ 第2步:重命名文件Module.pyc

PS:感谢gecco分享细节。

+0

提示:你的回答没有回答你的问题(为什么没有找到pyc):你的回答可能是由严重的SO用户下调... – gecco 2012-07-25 11:55:56

+1

@gecco,有两个部分来解决这个问题,我已经提到了上面。除非执行这两个步骤,否则不起作用。 您共享的流程图属于第1步。 所以,不知道为什么这应该被投票。因为,我刚刚尝试过,并且发现需要两个步骤才能使其正常工作 – 2012-07-25 12:53:17

+0

就我所能读的问题而言,您确实无处询问如何从'./__ pycache __/Module.cpython-32.py'到'/ Module.pyc'。你问为什么它不工作,以及如何解决它:两个答案都在我的答案中提供... – gecco 2012-07-25 14:51:33