2012-07-25 79 views
2

我使用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

回答

9

看一看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

2

如下所述,兩個步驟解決了這個問題: 步驟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