我的天,太坎坷了。
pychon 37-32 pycharm编译遇到的几个坑
1、设置虚拟环境可以使用国内镜像,
http://mirrors.aliyun.com/pypi/simple/
设置C:\Users\用户名\pip文件夹增加pip.ini格式如下
[golbal]
index-url = http://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host=mirrors.aliyun.com
2、使用pyinstaller中遇到任何编译问题及错误记得用python XXX.py进行调试(百度很多坑)
3、使用pyinstaller打包前必须经过调试找到问题,有时候使用python xxx.py能编译,但是独立编译就出错,一般是没打包完全,不管是撒,继续找问题:
首先将.py文件打包成命令行 pyinstaller -c xxx.py
然后利用控制台进入命令行文件夹cd xxx,然后在文件夹命令行内运行xxx.exe看输出
File “xxx.py”, line 2, in
ModuleNotFoundError: No module named ‘PyQt5’
找到问题,直接带入pyinstaller -F xxx.py --hidden-import PyQt5.sip
补充错误:
1、
python -m pip install --upgrade pip --force-reinstall
如果出现:
failed to create process.
则:
python -m pip install --upgrade pip --force-reinstall
python -m pip install --upgrade pyinstaller --force-reinstall
2、命令行升级:
pip install --upgrade pyinstaller
3、安装开发者版本:
pip install https://github.com/pyinstaller/pyinstaller/archive/develop.tar.gz
4、升级pip install –upgrade setuptools、升级PIP
打包出现:WARNING: Hidden import “sip” not found!
则:
pip install sip -i http://mirrors.aliyun.com/pypi/simple/
5、关于python36与python37之间版本的切换、
注意了:只要进入对应版本的文件夹即可!!!!!就是这么简单。
6、运行python.exe提示VCRUNTIME140.dll 缺失 解决办法
如果有用upx压缩请停止,版本不同,或者upx压缩错误, --noupx命令。
也有可能如下解决:
pyinstaller --clean --win-private-assemblies -F XXXX.py
–clean清除pyinstaller的缓存并移除之前建立的临时文件,
–win-私人组件把跟这个程序捆绑的共享的组件都改为私有的
调试阶段不用-w,因为如果有错误就打印在终端了而不是闪退
我的天@!这个问题困扰了很久也解决了。
如果需要打包dll,直接修改spen文件,配置如下:
编辑spec文件添加第三方DLL。例如xxx.py模块用到的DLL,按如下格式编辑xxx.spec文件的datas=[]参数;
datas=[(‘xx.dll’,’.’),(‘xx.dll’,’.’)]
编辑spec文件添加图标文件。提前准备图标文件,例如:xx.ico,在exe = EXE()中添加 icon=‘xx.ico’ 参数,如下:
exe = EXE(pyz,
a.scripts,
a.binaries,
a.zipfiles,
a.datas,
name='test',
debug=False,
strip=False,
upx=True,
runtime_tmpdir=None,
console=True , icon='xx.ico')
范本spen:带dll带上了PyQt5.sip
# -*- mode: python ; coding: utf-8 -*-
block_cipher = None
a = Analysis(['xxx.py'],
pathex=['E:\\LSW\\2\\qrcode'],
binaries=[],
datas=[('libiconv-2.dll','.'),('libzbar-32.dll','.')],
hiddenimports=['PyQt5.sip'],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher,
noarchive=False)
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz,
a.scripts,
a.binaries,
a.zipfiles,
a.datas,
[],
name='xxx',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
upx_exclude=[],
runtime_tmpdir=None,
console=False )
最后:
利用upx命令压缩exe。下载对应版本的upx工具包解压到任意目录下,执行命令
另一种直接解压后复制upx.exe到python目录下,然后直接编辑spec文件的upx为False
pyinstaller -F xxx.spec --upx upx路径
UPX
搞定!!!
补充:
ImportError: unable to find Qt5Core.dll on PATH
则Fix PyQt5
Save this code snip to a file named fix_qt_import_error.py, then add the line import fix_qt_import_error to your files that need to import PyQt5
# Fix qt import error
# Include this file before import PyQt5
import os
import sys
import logging
def _append_run_path():
if getattr(sys, 'frozen', False):
pathlist = []
# If the application is run as a bundle, the pyInstaller bootloader
# extends the sys module by a flag frozen=True and sets the app
# path into variable _MEIPASS'.
pathlist.append(sys._MEIPASS)
# the application exe path
_main_app_path = os.path.dirname(sys.executable)
pathlist.append(_main_app_path)
# append to system path enviroment
os.environ["PATH"] += os.pathsep + os.pathsep.join(pathlist)
logging.error("current PATH: %s", os.environ['PATH'])
_append_run_path()
奇葩问题:
pycharm中import导入包呈现灰色问题之解决!
问题描述:pycharm中单个py文件导入包时呈灰色,而别的文件却能正常显示,我按照CSDN博客上给的设置
①右键点击项目,找下面的Mark Directory as 选择Source Root”
以及
②点击File-Invalidte Caches/Restart…重启
两种方法均不起作用,无法解决问题。
我的解决方法:将鼠标移动到那行代码,点击出现提示“Unused import statement”表示import声明不可用,左边同时出现黄色小灯泡,将鼠标移动至黄色小灯泡那里,会出现向下箭头,点击箭头出现下拉菜单,继续点击第一条“Optimize imports”(切记要点击的是最右边的三角号,不是这一整行,否则会出错),右面选择第四个“Suppress for statement”,即可。
import pygame重新点亮,一切恢复原样!
总结一下:发现上述操作实际上是为无法使用的导入声明添加了内容为“# noinspection PyUnresolvedReferences”的注释,它专门针对“This inspection detects names that should resolve but don’t. Due to dynamic dispatch and duck typing, this is possible in a limited but useful number of cases. Top-level and class-level items are supported better than instance items.”提示的情况。其作用是:让PyCharm 在代码检查时人为跳过某些特定部分的代码检查。