本文记录下飘易在Python开发中遇到的一些常见问题:
一般的pip安装由于使用的国外的资源,速度可能比较慢,这个时候可以指定 -i 参数设定国内的镜像,比如 豆瓣的:
pip install PyQt5 -i https://pypi.douban.com/simple
pip install PyQt5-tools -i https://pypi.douban.com/simple
pipinstall pypiwin32 -i https://pypi.douban.com/simple
包括了:
_win32sysloader
_winxptheme
mmapfile
odbc
perfmon
servicemanager
timer
win2kras
win32api
win32clipboard
win32console
win32cred
win32crypt
win32event
win32evtlog
win32file
win32gui
win32help
win32inet
win32job
win32lz
win32net
win32pdh
win32pipe
win32print
win32process
win32profile
win32ras
win32security
win32service
win32trace
win32transaction
win32ts
win32wnet
winxpgui
采用selenium操作浏览器执行自动化操作的场景时,在使用 pyinstaller 打包成exe文件后,会有chromedriver.exe 或 geckodriver.exe 的console命令行窗口,如:
我们打包成exe文件一般是要分发到客户电脑上,出现这个窗体不太友好,我们需要把它隐藏掉:
找到python安装目录,比如:
D:\Python\Python37\Lib\site-packages\selenium\webdriver\common\service.py
修改这个文件,先在顶部导入依赖包:from win32process import CREATE_NO_WINDOW
然后找到def start(self) 函数,里面的 subprocess.Popen增加一个参数:creationflags=CREATE_NO_WINDOW
最终改成:
self.process= subprocess.Popen(cmd, env=self.env, close_fds=platform.system() != 'Windows', stdout=self.log_file, stderr=self.log_file, stdin=PIPE, creationflags=CREATE_NO_WINDOW)
也可以直接使用creationflags=0x08000000这样的值。
重新打包 pyinstaller -F -w main.py 就可以了。
应该是pycharm设置的默认python编译器不正确,打开Settings- Project Interpreter,选择正确的编译器,比如全局的已安装第三方包的编译器:
首次创建项目时:
注意勾选Inherit globalsite-packages 和 Make available to all projects。以后创建其他项目时,选择这个虚拟环境即可,使用这个虚拟环境可以解决一些cannot find reference 'QtWidgets' in '__init__.py 错误,如果使用全局的python环境,pyCharm这里有一些bug的。
报错日志如下:
Traceback(most recent call last): File"D:/Python/project/chrome/mainfox.py", line 15, in <module> from tomorrow import threads File"D:\Python\Python37\lib\site-packages\tomorrow\__init__.py", line 1,in <module> from .tomorrow import threads File"D:\Python\Python37\lib\site-packages\tomorrow\tomorrow.py", line 20 def async(n, base_type, timeout=None): ^ SyntaxError:invalid syntax
解决:async 到python 3之后是内置关键字,不能使用,重命名一下,找到:
Python37\lib\site-packages\tomorrow\tomorrow.py
把async改成 async_tm 就可以了。