標籤:

pyinstaller無法打包含requests模塊的程序?

環境是python3.5+Win10

源程序像

import requests
print(hello)

打開打包後的程序無法運行

顯示:

ImportError: No module named queue

During handling of the above exception, another exception occurred:

Traceback (most recent call last):

File "test.py", line 2, in &

File "c:usershaseeappdatalocalprogramspythonpython35-32libsite-packagesPyInstallerloaderpyimod03_importers.py", line 389, in load_module

exec(bytecode, module.__dict__)

File "site-packages
equests\__init__.py", line 63, in &

File "c:usershaseeappdatalocalprogramspythonpython35-32libsite-packagesPyInstallerloaderpyimod03_importers.py", line 389, in load_module

exec(bytecode, module.__dict__)

File "site-packages
equestsutils.py", line 24, in &

File "c:usershaseeappdatalocalprogramspythonpython35-32libsite-packagesPyInstallerloaderpyimod03_importers.py", line 389, in load_module

exec(bytecode, module.__dict__)

File "site-packages
equests\_internal_utils.py", line 11, in &

File "c:usershaseeappdatalocalprogramspythonpython35-32libsite-packagesPyInstallerloaderpyimod03_importers.py", line 389, in load_module

exec(bytecode, module.__dict__)

File "site-packages
equestscompat.py", line 11, in &

File "c:usershaseeappdatalocalprogramspythonpython35-32libsite-packagesPyInstallerloaderpyimod03_importers.py", line 389, in load_module

exec(bytecode, module.__dict__)

File "site-packages
equestspackages\__init__.py", line 29, in &

ImportError: No module named urllib3

Failed to execute script test


2017.03.01

長久沒上,根據有些童鞋的私信補充一下啊:

需要降低的是requests的版本,requests2.10可以,2.11不可以,看官網後續更新是否支持。其他包的問題可能也類似。

--------------------------------------

pyinstaller 3.2版本(當前最新,截止2016.12.30)支持到requests2.10,如果高於這個版本就會出現相關錯誤。降低版本便可以了。這個坑有點扯,希望更多人看到。


python程序中使用到requests,在開發環境中可以正常運行,但用pyinstaller 打包成單個exe文件後,卻無法運行,提示 requests 中的urllib3依賴的一個six.py模塊出現運行錯誤,提示 no module named queue 接著導致提示 no module named urllib3

six.py提示錯誤在82行

def _import_module(name): """Import module, returning the module after the last dot.""" __import__(name) #82 return sys.modules[name]

看起來像是自動導入模塊,查了些資料了解sys.modules 是個字典存儲有python啟動到現在,已載入的模塊

我的程序中沒有直接用queue模塊的地方,打包後也沒有其他途徑載入這個模塊,導致找不到。開發環境中運行卻無錯(猜測開發環境啟動時自動載入了一些模塊,可能是給用戶環境準備的,也可能是開發工具自己要使用就先載入了),嘗試在自己的程序中加入一句「import queue」,顯示導入這個模塊(注該模塊是標準庫中一部分),儘管程序中沒有使用到。

再次打包,運行exe文件,成功,問題解決!

轉自

lanfeng330的專欄


其實直接在打包的時候加上 --hidden-import 參數就好:

pyinstaller -F --hidden-import queue script.py


我找到一個辦法,原網頁在這裡:

pyinstaller 打包exe 遇到的問題-jun270148122-ChinaUnix博客

簡單的地說就是在pyinstaller指令後面添加上--hidden-import queue,對於沒有顯示導入的就需要這樣寫打包命令。


一樣我用的3.2.1 打包 2.11.1的requests照樣不行 2.7python


請問這個問題解決了么?求支招,網上各種方法都試過了還是沒解決。樓上說的沒理解明白,是要降低哪個的版本?我的pyinstaller是3.2 python是2.7版本。


推薦閱讀:

Python從零開始系列連載(23)——Python特色數據類型(字典)(下)
第十三章 Python: xml轉json
Flowpython針對lambda的一個修正
linux下pip模塊安裝路徑?

TAG:Python |