python打包 : 程序打包 pyinstaller + protable

本文介绍了如何使用Python的Mahotas库进行Wally(人脸识别)检测,并结合OpenCV进行图像处理,包括颜色通道分离、滤波操作和视频监控中的录像与播放。同时,讲解了PyInstaller打包工具的使用,如创建spec文件和处理常见问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

编写程序

# 比如如何使用Python找到Wally https://mahotas.readthedocs.io/en/latest/wally.html
from pylab import imshow
import numpy as np
import mahotas
wally = mahotas.imread('DepartmentStore.jpg')

wfloat = wally.astype(float)
r,g,b = wfloat.transpose((2,0,1))
分成红色、绿色和蓝色频道。下面使用浮点算法比较好,所以我们在顶部进行转换。
w = wfloat.mean(2)
w是白色频道。
pattern = np.ones((24,16), float)
for i in xrange(2):
    pattern[i::4] = -1
在垂直轴上建立+1+1-1-1的模式。
v = mahotas.convolve(r-w, pattern)
用红色减去白色。
mask = (v == v.max())
mask = mahotas.dilate(mask, np.ones((48,24)))
查找最大值并将其展开以使其可见。现在,我们淡化整个形象,除了区域或兴趣:
wally -= .8*wally * ~mask[:,:,None]
imshow(wally)
我们得到from pylab import imshow
import numpy as np
import mahotas
wally = mahotas.imread('DepartmentStore.jpg')

wfloat = wally.astype(float)
r,g,b = wfloat.transpose((2,0,1))
分成红色、绿色和蓝色频道。下面使用浮点算法比较好,所以我们在顶部进行转换。
w = wfloat.mean(2)
w是白色频道。
pattern = np.ones((24,16), float)
for i in xrange(2):
    pattern[i::4] = -1
在垂直轴上建立+1+1-1-1的模式。
v = mahotas.convolve(r-w, pattern)
用红色减去白色。
mask = (v == v.max())
mask = mahotas.dilate(mask, np.ones((48,24)))
查找最大值并将其展开以使其可见。现在,我们淡化整个形象,除了区域或兴趣:
wally -= .8*wally * ~mask[:,:,None]
imshow(wally)

opencv官方文档
图像的一些变换处理
opencv视频监控
调用摄像头进行录像与播放 : c#,C++,Python

打包

1.pyinstaller

在这里插入图片描述

pip install pyinstaller
在控制台测试一下:
(torch) C:\****>pyinstaller
usage: pyinstaller [-h] [-v] [-D] [-F] [--specpath DIR] [-n NAME] [--add-data <SRC;DEST or SRC:DEST>] [--add-binary <SRC;DEST or SRC:DEST>] [-p DIR] [--hidden-import MODULENAME]
                   [--collect-submodules MODULENAME] [--collect-data MODULENAME] [--collect-binaries MODULENAME] [--collect-all MODULENAME] [--copy-metadata PACKAGENAME]
                   [--recursive-copy-metadata PACKAGENAME] [--additional-hooks-dir HOOKSPATH] [--runtime-hook RUNTIME_HOOKS] [--exclude-module EXCLUDES] [--key KEY]
                   [--splash IMAGE_FILE] [-d {all,imports,bootloader,noarchive}] [--python-option PYTHON_OPTION] [-s] [--noupx] [--upx-exclude FILE] [-c] [-w]
                   [-i <FILE.ico or FILE.exe,ID or FILE.icns or Image or "NONE">] [--disable-windowed-traceback] [--version-file FILE] [-m <FILE or XML>] [--no-embed-manifest]
                   [-r RESOURCE] [--uac-admin] [--uac-uiaccess] [--win-private-assemblies] [--win-no-prefer-redirects] [--argv-emulation] [--osx-bundle-identifier BUNDLE_IDENTIFIER]
                   [--target-architecture ARCH] [--codesign-identity IDENTITY] [--osx-entitlements-file FILENAME] [--runtime-tmpdir PATH] [--bootloader-ignore-signals]
                   [--distpath DIR] [--workpath WORKPATH] [-y] [--upx-dir UPX_DIR] [-a] [--clean] [--log-level LEVEL]
                   scriptname [scriptname ...]
pyinstaller: error: the following arguments are required: scriptname

pyinstaller -D TEST.py # 打包成文件夹
pyinstaller -F TEST.py # 打包成一个文件,在运行时生成临时目录解压成以上形式,

单文件找不到目录的解决

解决方案:

 BASE_DIR=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
 改为
  BASE_DIR=os.path.dirname(os.path.dirname(os.path.realpath(sys.argv[0])))

一般错误与解决

问题参考解决注释
读取config.ini出错将配置文件放到exe同级目录下
Error loading Python DLLhttps://blog.youkuaiyun.com/Bit_Coders/article/details/122986216python3.9不支持win7Note that Python 3.9.12 cannot be used on Windows 7 or earlier.
error loading python dll python37.dllhttps://blog.youkuaiyun.com/zouxin_88/article/details/122615107点击dist文件夹中的exe运行,不要点击build文件下的exe。有效
Failed to execute script ‘pyiboot01_bootstrap’ due to unhandled exception: [WinError 87]https://blog.youkuaiyun.com/Bit_Coders/article/details/122986216缺失了win7补丁 KB2533623 导致的
FileNotFoundErrorhttps://blog.youkuaiyun.com/lucyTheSlayer/article/details/92795220自己写个hook,然后放进pyinstaller的hooks里
no module–hidden-importpyinstall -i ./icon.ico -F test.py --hidden-import module

一个文件夹下的多个py文件的打包

spec文件:https://pyinstaller.org/en/stable/spec-files.html
cd 你的文件夹路径
pyi-makespec 主要执行的文件.py
生成了 主要执行的文件.spec
# -*- mode: python ; coding: utf-8 -*-


block_cipher = None


a = Analysis(
    ['主要执行的文件.py','执行文件1.py','执行文件2.py','执行文件3.py'], # 加入所有需要打包的文件
    pathex=[], # pathex:搜索导入的路径列表(例如使用 PYTHONPATH),包括选项给出的路径--paths 。    pathex is an optional list of paths to be searched before sys.path
    pathex=["C:\\test"],
    binaries=[], # 脚本需要的非python模块,包括--add-binary选项给出的名称;
    datas=[],  # 应用程序中包含的非二进制文件,包括--add-data选项给出的名称 [ ( 'test.txt', '.' ),( '  anothertest.txt', '.' )],
    hiddenimports=[],
    hookspath=[],
    hooksconfig={},
    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,
    [],
    exclude_binaries=True,
    name='主要执行的文件',
    debug=False,
    bootloader_ignore_signals=False,
    strip=False,
    upx=True,
    console=True,
    disable_windowed_traceback=False,
    argv_emulation=False,
    target_arch=None,
    codesign_identity=None,
    entitlements_file=None,
)
coll = COLLECT(
    exe,
    a.binaries,
    a.zipfiles,
    a.datas,
    strip=False,
    upx=True,
    upx_exclude=[],
    name='主要执行的文件',
)
打包
# 在terminal 运行
pyinstaller 主要执行的文件.spec
问题与解决
问题参考解决注释
FileNotFounddatas= [ ( ‘test.txt’, ‘.’ )],
多线程参考视频 参考文章在 if name == “main”: 下添加 multiprocessing.freeze_support()即可
no module named ****如果是自己写的文件,添加到exe同目录下即可,其他的参考网上的其他回答即可
添加图标
pyinstall -i ./icon.ico -F test.py

2.portable版本

could not install packages due to an OSError(‘Received response with content-encoding: gzip, but failed to decode it.’) (error -3)
换源http://pypi.douban.com/simple
重启电脑https://stackoverflow.com/questions/71962494/python-error-could-not-install-packages-due-to-an-oserror-received-response
或者尝试复制一个已安装的包
另外运行中会有警告:
# 参考第二篇添加一个设置 环境变量 的bat
@echo off
set PYTHON_HOME=%cd% 
set PATH=%PYTHON_HOME%;%PYTHON_HOME%/Scripts;%PATH%
@echo on
# 更多与参考
[添加链接描述](https://www.cnblogs.com/hester/p/11321884.html)
[添加链接描述](https://www.jianshu.com/p/e2402fb35553)
[添加链接描述](https://www.jianshu.com/p/8bd34d13415e)
[打包多个文件的方法](https://blog.youkuaiyun.com/Aacheng123/article/details/120597852)
[path的讨论('pathex' 参数的绝对路径问题:pathex is an optional list of paths to be searched before sys.path)](https://stackoverflow.com/questions/19546493/how-can-i-make-pyinstallers-spec-files-actually-portable-woes-absolute-path)
[图标的设置](https://github.com/pyinstaller/pyinstaller/issues/3333)

3.https://portablepython.com/

      网站中最新的版本为2014年上传的:Portable Python 2.7.6.1和 Portable Python 3.2.5.1,可能对于某些工程版本不适配。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值