pyinstaller無法打包含requests模塊的程序?
環境是python3.5+Win10
源程序像打開打包後的程序無法運行顯示:ImportError: No module named queue
import requests
print(hello)
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 urllib3Failed 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 |