作者st1009 (前端攻城师)
看板Python
标题[问题] Linux下Python配置与PyQT
时间Fri Jul 20 00:25:52 2018
希望可以请教一下板上大大们,一些问题,
并且希望大大们指点我该如何学习让自己能解决这些问题<(_ _)>
先说一下目标,在下希望可以创建一个图形化的程式打包来,到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://webptt.com/cn.aspx?n=bbs/Python/M.1532017556.A.6DB.html
1F:→ s860134: 1. 我不熟 2. 我猜是你 import 相依到了? 07/20 00:29
1.QAQQQ
2.我在pip PyQT以前有打包过那些档案,是成功的,所以应该没有相依到吧
2F:→ s860134: 3. 这个是很常见得问题,熟 bash 你可以用 which 07/20 00:30
3F:→ s860134: shell 底下是看 $PATH 的顺序依序找目录底下 "python" 07/20 00:30
4F:→ s860134: 名称的可执行档 07/20 00:30
5F:→ s860134: 谁排在前面谁就先被找,所以你改个 path 或是指定绝对 07/20 00:31
我使用which python3找到了/usr/local/bin/python3
可是这样来说的话/usr/bin的python3(3.5.2)应该会优先执行,
因为排比较前面不是嘛,不懂
6F:→ s860134: 路径可以解决,根治方法很多,通常会推荐 venv 07/20 00:31
我可能找时间研究一下
7F:→ s860134: ubuntu 有包一些工具可以找档案 whereis , which 07/20 00:32
8F:→ s860134: python 07/20 00:33
9F:→ s860134: whereis python 应该就会依序列出你的 07/20 00:33
10F:→ 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的理解有错嘛?
11F:推 HenryLiKing: 我用过 但是我的万解是用 anaconda耶 07/20 01:00
如果我之後找不到解,应该就投入anaconda的怀抱看看了QAQQQ
12F:→ 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前面嘛(?
13F:→ s860134: 不是,他找到第一个是 /usr/local/bin/python3 07/20 01:09
14F:→ 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
16F:→ s860134: 以你的例子 第一个会先找 /usr/local/cuda-8.0/bin 07/20 01:13
17F:→ s860134: 但是想必 cuda 理面没有放叫作 "python3" 的档案 07/20 01:13
18F:→ s860134: 所以他会再找 /home/littlewind/bin 07/20 01:14
19F:→ s860134: 以此类推 直到找到第一个目录底下有叫做 python3 的档案 07/20 01:14
20F:→ s860134: 而且必须有执行权限 07/20 01:16
21F:→ s860134: 只要记住,电脑很笨,他不会知道你哪里放有 python3 07/20 01:16
22F:→ 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