2011-03-04 282 views
2

我的可執行腳本正在使用的軟件包很少依賴於xlrd模塊。所以我嘗試使用include選項將該模塊包含在安裝腳本中,如圖所示。但是,當runnery.py調用封裝模塊時,雖然xlrd文件存在於library.zip文件中,但該模塊無法導入xlrd。無法導入xlrd模塊

from cx_Freeze import setup, Executable 
import xlrd 

buildOptions = dict(
       compressed = True, 
       optimize=2, 
       path=sys.path+[".\\uitls", 「.\\supported」], 
include_files=[「Doc"], 
       includes=[「xlrd」, "win32com"], 
       packages=["utils", 」supported"], 
       append_script_to_exe=True, 
       copy_dependent_files=True, 
       ) 
setup(
       name = "TestExecutable", 
       version = "0.1", 
       options = dict(build_exe = buildOptions), 
          executables = [Executable(
             script=r".\\codebase\\ runner.py", 
             icon=".\\icon.ico", 
             base="Win32GUI")] 
       ) 

但是,如果我嘗試在runner.py中導入xlrd,它可以導入它。我不確定在這種情況下發生了什麼問題,因爲依賴軟件包不能導入xlrd。有沒有一些選擇,我失蹤或我做錯了什麼?

更新: 我發現依賴軟件包是通過產生一個進程來調用的,所以它創建一個新的環境,它沒有將xlrd模塊寫入它並且不知道包含它的library.zip。那麼現在,我是否可以通過壓縮文件使xlrd模塊可用於包?即使它是通過新流程運行的嗎? 問候,

+0

請注意,您的「代碼」包含MS Word打開/關閉引號字符......將xlrd與win32com的'includes = [「xlrd」,「win32com」],'...進行比較......請顯示您實際運行的代碼;不要編輯它,也不要從內存中輸入它。 – 2011-03-05 08:45:00

+0

什麼會產生新的過程? runner.py?什麼是您的setup.py創建的exe文件的名稱?什麼是生成的exe文件的名稱? – 2011-03-07 23:55:55

回答

1

當您下載xlrd包,你有兩個選擇:

  1. 包含在你的Python路徑xlrd-0.7.1\xlrd\
  2. 安裝它python xlrd-0.7.1\setup.py install

一旦您已處理完畢(或一個)。確認您可以導入它。打開python並輸入import xlrd。如果您看不到錯誤,則表示已成功安裝。

+0

xlrd已成功安裝在我的機器上,並且在未使用xlrd進行打包時代碼運行良好...只有當我使用cx_freeze – snehal 2011-03-04 06:27:38

1

也許uitlspath=sys.path+[".\\uitls", 「.\\supported」],應該是utils

xlrd的安裝位置在哪裏?

xlrd是一個包,而不是一個模塊;你有沒有嘗試把它放在包列表中而不是包含列表中?

始終使用原始字符串。

爲什麼在script=r".\\codebase\\ runner.py",中加了反斜槓? Windows似乎將多個反斜槓視爲一個,但爲什麼它會呢?爲什麼在runner.py之前有空間?你確定這個設置文件實際運行嗎?

+0

打包時,問題纔會出現。嗨,我按照您的建議清理了setup.py文件,並將xlrd添加到軟件包選項,但錯誤仍然存​​在。 runner.py中的空間實際上是錯誤的,因爲我正在清理腳本以發佈它:) – snehal 2011-03-07 11:36:31

1

找到解決問題的辦法 我從lib \ site-packages文件夾複製了xlrd文件夾並將其包含在include_files選項下。現在,當我的子進程可執行文件運行時,路徑被設置,所以它知道xlrd的位置,並且可執行文件能夠導入xlrd。

0

聽起來像xlrd模塊沒有正確安裝。您可以從Windows pip install xlrd中的命令提示符進行安裝,並且這應該可以解決您的問題。當使用熊貓讀取擴展名爲xlsx的文件時,我遇到了同樣的問題。