看板 Python 關於我們 聯絡資訊
希望可以請教一下板上大大們,一些問題, 並且希望大大們指點我該如何學習讓自己能解決這些問題<(_ _)> 先說一下目標,在下希望可以創建一個圖形化的程式打包來,到windows上跑, 讓windows上的用戶不用會python也可以使用我的程式, 然後因為我使用tkinter的能力不佳,畫面有點醜,經過推荐,想要嘗試用PyQT5做介面。 我的系統是Linux Mint 18.2 python版本舊的是3.5.2 新的是3.6.0 事情經過是這樣的,我clone了一個使用PyQT5的程式,試圖執行並且打包他, 但執行是跳錯了, 錯誤訊息是 ImportError: /usr/local/lib/python3.5/dist-packages/PyQt5/QtCore.so: undefined symbol: PySlice_AdjustIndices 經過一些Google之後,我嘗試下載mu-editor,但是並沒有好轉, 我猜測可能python3.5的毛比較多,所以嘗試下載3.6, 結果對於系統不算很了解的我下載3.6之後問題更多了QAQQQ 我設定不知道哪裡出問題,執行時還是跳undefined symbol: PySlice_AdjustIndices 然後我發現我舊的檔案用pyinstaller打包時跳錯誤訊息 File "/usr/local/lib/python3.5/dist-packages/PyInstaller/utils/hooks/qt.py", line 39, in qt_plugins_dir raise Exception('Cannot find {0} plugin directories'.format(namespace)) Exception: Cannot find PyQt5 plugin directories 可是我嘗試打包的檔案並沒有包含PyQt5! 我發現執行python3 -V 的時候是Python 3.6.0 但如果我用絕對位址/usr/bin/python3 -V會是Python 3.5.2 我不懂為何會這樣...不是執行的shell會在/usr/bin裡嘛? 如果不是?那麼我現在執行的python3又是再哪裡?我該如何設定他? 總結: 我有3個主要問題 1.我該怎麼讓我linux上的PyQT跑起來? 2.為甚麼我沒有包含PyQT的程式打包跟著報錯?我該如何修理 3.python執行的shell我該如何設定?現在好混亂... -- 壁河山攻守 爭成敗悟道 許銀川 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.163.147.22 ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1532017556.A.6DB.html
s860134: 1. 我不熟 2. 我猜是你 import 相依到了? 07/20 00:29
1.QAQQQ 2.我在pip PyQT以前有打包過那些檔案,是成功的,所以應該沒有相依到吧
s860134: 3. 這個是很常見得問題,熟 bash 你可以用 which 07/20 00:30
s860134: shell 底下是看 $PATH 的順序依序找目錄底下 "python" 07/20 00:30
s860134: 名稱的可執行檔 07/20 00:30
s860134: 誰排在前面誰就先被找,所以你改個 path 或是指定絕對 07/20 00:31
我使用which python3找到了/usr/local/bin/python3 可是這樣來說的話/usr/bin的python3(3.5.2)應該會優先執行, 因為排比較前面不是嘛,不懂
s860134: 路徑可以解決,根治方法很多,通常會推薦 venv 07/20 00:31
我可能找時間研究一下
s860134: ubuntu 有包一些工具可以找檔案 whereis , which 07/20 00:32
s860134: python 07/20 00:33
s860134: whereis python 應該就會依序列出你的 07/20 00:33
s860134: python 有幾個放在 $PATH 路徑下惹 07/20 00:34
嗯嗯,有嘗試使用了 whereis python python: /usr/bin/python2.7 /usr/bin/python3.5m-config /usr/bin/python /usr/bin/python3.5m /usr/bin/python3.5 /usr/bin/python3.5-config /usr/lib/python2.7 /usr/lib/python3.5 /usr/lib/python2.6 /etc/python2.7 /etc/python /etc/python3.5 /usr/local/bin/python3.6m-config /usr/local/bin/python3.6-config /usr/local/bin/python3.6 /usr/local/bin/python3.6m /usr/local/lib/python2.7 /usr/local/lib/python3.5 /usr/local/lib/python3.6 /usr/include/python2.7 /usr/include/python3.5m /usr/include/python3.5 /usr/share/python /usr/share/man/man1/python.1.gz 我好混亂...是我對於PATH的理解有錯嘛?
HenryLiKing: 我用過 但是我的萬解是用 anaconda耶 07/20 01:00
如果我之後找不到解,應該就投入anaconda的懷抱看看了QAQQQ
s860134: ls -al /usr/local/bin/python3 看一下他的 soft-link 07/20 01:05
lrwxrwxrwx 1 root root 9 7月 19 22:34 /usr/local/bin/python3 -> python3.6 順便 lrwxrwxrwx 1 root root 9 7月 18 2017 /usr/bin/python3 -> python3.5 所以3.5的PATH這樣不是在3.6前面嘛(?
s860134: 不是,他找到第一個是 /usr/local/bin/python3 07/20 01:09
s860134: 跟你路徑長短沒關係,而是誰在 PATH 前面 07/20 01:09
PATH前後要怎看阿? echo $PATH 跑出 /usr/local/cuda-8.0/bin:/home/littlewind/bin:/home/littlewind/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/ games:/usr/local/games
s860134: https://imgur.com/rdDtn25 07/20 01:13
s860134: 以你的例子 第一個會先找 /usr/local/cuda-8.0/bin 07/20 01:13
s860134: 但是想必 cuda 理面沒有放叫作 "python3" 的檔案 07/20 01:13
s860134: 所以他會再找 /home/littlewind/bin 07/20 01:14
s860134: 以此類推 直到找到第一個目錄底下有叫做 python3 的檔案 07/20 01:14
s860134: 而且必須有執行權限 07/20 01:16
s860134: 只要記住,電腦很笨,他不會知道你哪裡放有 python3 07/20 01:16
s860134: 他一定是照著一個規則去找特定目錄下的 python3 07/20 01:17
嗯,謝謝您,第3個問題大約明白了,接下來就是等1和2了 可能會研究一下您說的venv不知道他跟anaconda相容嘛,應該可以吧吧吧 受我一拜,感謝您用心的講解m(_ _)m 7/23 自問自答3.5.2不行,3.6也不行,3.6.1就可以,結論是python毛的問題... 然後我運氣真差Orz ※ 編輯: st1009 (1.163.142.147), 07/23/2018 21:22:23