2017-10-20 101 views
1

我運行下面的代碼:PyInstaller運行良好,但exe文件錯誤:沒有模塊命名,無法執行腳本

pyinstaller --onefile main.py 

main.py樣子:

import sys 
import os 
sys.path.append(r'C:\Model\Utilities') 
from import_pythonpkg import * 

...... 

import_pythonpkg.py樣子:

from astroML.density_estimation import EmpiricalDistribution 
import calendar 
import collections 
from collections import Counter, OrderedDict, defaultdict 
import csv 

.... 

通過在運行,main.exe文件已成功創建。

但是,當我運行main.exe它給出了與astroML錯誤。如果我從import_pythonpkg.pyastroML移動到main.py,則astroML沒有錯誤。現在我遇到了csv錯誤。

即如果我改變main.py爲看:

import sys 
from astroML.density_estimation import EmpiricalDistribution 
import os 
sys.path.append(r'C:\Model\Utilities') 
from import_pythonpkg import * 

...... 

astroML錯誤不再出現,當我運行main.exe

根本沒有import calendar行在import_pythonpkg.py行錯誤。

我不確定如何運行pyinstaller後運行main.exe運行時如何處理此包隨機錯誤。

import_pythonpkg位於r'C:\Model\Utilities'

編輯:

錯誤與main.exe看起來如下即使原始main.py運行正常。 Pyinstaller甚至能夠讓我創建無誤的main.exe

Traceback (most recent call last): 
    File "main.py", line 8, in <module> 
    File "C:\Model\Utilities\import_pythonpkg.py", line 1, in <module> 
    from astroML.density_estimation import EmpiricalDistribution 
ImportError: No module named astroML.density_estimation 
[29180] Failed to execute script main 
+0

你是否有確切的錯誤消息? – The4thIceman

+0

pyinstaller可能運行沒有錯誤,但它可能不包括適當的東西。有沒有警告?您還可以發佈pyinstaller命令的日誌,以便我們掌握正在發生的事情的全貌。 – The4thIceman

回答

1

我相信PyInstaller沒有看到import_pythonpkg。根據我的經驗,當添加到路徑或處理外部模塊和dll時,PyInstaller不會去搜索那個,你必須明確地告訴它這樣做。它會正確編譯爲.exe,因爲它只是忽略它,但不會運行。在運行PyInstaller命令時,檢查是否有關於丟失的軟件包或模塊的警告。

但如何解決它......如果這確實是問題(這我不知道,這是)你可以嘗試3兩件事:

1)移動這個包到工作目錄,並避免使用sys.path.append。然後使用PyInstaller進行編譯,以查看這是否有效,然後您知道問題是pyinstaller無法找到import_pythonpkg。如果有效,你可以在那裏停下來。

2)明確告訴PyInstaller看看那裏。在使用PyInstaller進行編譯時,您可以使用hidden-import標籤讓它知道(給它全路徑名)。

​​

更多信息,請瀏覽:How to properly create a pyinstaller hook, or maybe hidden import?

3)如果你使用的是PyInstaller創建規範文件,你可以嘗試添加一個變量調用pathex告訴PyInstaller到的東西有搜索:

block_cipher = None 
a = Analysis(['minimal.py'], 
    pathex=['C:\\Program Files (x86)\\Windows Kits\\10\\example_directory'], 
    binaries=None, 
    datas=None, 
    hiddenimports=['path_to_import', 'path_to_second_import'], 
    hookspath=None, 
    runtime_hooks=None, 
    excludes=None, 
    cipher=block_cipher) 
pyz = PYZ(a.pure, a.zipped_data, 
    cipher=block_cipher) 
exe = EXE(pyz,...) 
coll = COLLECT(...) 

關於規範文件的詳細信息:https://pyinstaller.readthedocs.io/en/stable/spec-files.html

(注意,你還可以添加hiddenimports這裏)

這個答案也許有幫助:PyInstaller - no module named

相關問題