惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

U
Unit 42
P
Proofpoint News Feed
The Last Watchdog
The Last Watchdog
S
Secure Thoughts
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
N
News | PayPal Newsroom
Application and Cybersecurity Blog
Application and Cybersecurity Blog
O
OpenAI News
S
Security @ Cisco Blogs
宝玉的分享
宝玉的分享
Hacker News: Ask HN
Hacker News: Ask HN
T
Troy Hunt's Blog
Google Online Security Blog
Google Online Security Blog
WordPress大学
WordPress大学
有赞技术团队
有赞技术团队
TaoSecurity Blog
TaoSecurity Blog
Help Net Security
Help Net Security
Latest news
Latest news
NISL@THU
NISL@THU
S
Security Affairs
博客园_首页
C
CXSECURITY Database RSS Feed - CXSecurity.com
博客园 - 聂微东
AI
AI
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Recent Announcements
Recent Announcements
P
Privacy & Cybersecurity Law Blog
小众软件
小众软件
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Hugging Face - Blog
Hugging Face - Blog
博客园 - 司徒正美
AWS News Blog
AWS News Blog
W
WeLiveSecurity
Google DeepMind News
Google DeepMind News
I
InfoQ
Schneier on Security
Schneier on Security
Recent Commits to openclaw:main
Recent Commits to openclaw:main
T
The Exploit Database - CXSecurity.com
IT之家
IT之家
T
Threatpost
Scott Helme
Scott Helme
L
LINUX DO - 热门话题
腾讯CDC
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
N
News and Events Feed by Topic
L
LINUX DO - 最新话题
F
Full Disclosure
大猫的无限游戏
大猫的无限游戏
H
Heimdal Security Blog
S
SegmentFault 最新的问题

longlin的个人小站

Conclusion | 2023 年终总结 Confused | 写在19岁的开篇 Rewrite: Start my blog again CommonGit | 个人用常见git命令记录 Summary | 2023 暑期总结 Cumcmthesis | 基于LaTeX的数模写作模板 Hugo ShortCode | 丰富你的 Markdown
EmbedPython | 一种py打包方式
longlin · 2023-08-18 · via longlin的个人小站

一切的起因

我最近在用 Pyside6 写一个类似视频播放器的项目,期间装了很多相关依赖。功能实现后想把程序发给别人时却遇到了难题,如果只是简单用 zip 或 rar 打包的话在对方主机上解压程序会因为缺乏相关依赖而无法运行。这就比较令人头疼了。

我最初的想法是将程序以及环境打包成 docker 镜像进行分发,但是最后因为两点原因放弃了,其一是这样打包出来的 docker 镜像可能较大,其二是我本地的开发环境是 windows 系统,虽然可以使用 WSL2 ,但是感觉使用起来会比较麻烦,甚至还要手动编写 dockerfile 。

再这之后我又上网寻找了一些 python 打包方案,或是不令人满意,或是与我的诉求不符。

最终几番轮回下我还是选择了在知乎上看到的一篇 利用Python embed方法打包的文章 ,整体看上去感觉上手难度不大,并且文章发布日期也不是很久远,所以立马动手进行操作。

踩坑的经过

我首先是按照教程进行操作,解压安装打包一气呵成。但是结果无法运行。

由于教程的后几步我不太理解是怎么回事,尤其是最后 download.png 部分让我完全摸不着头脑。看到寥寥几行的 bat ,我首先以为是 bat 文件中缺少了相关代码。后来在 chenx 大佬的指点下发现其实只要这两行代码就已经够了。

由于没了解问题所在,我试着按教程再重新走一遍,但是在这一遍的过程中,我忘记将 ._pth 文件删除了,所以运行时报了找不到对应依赖的 error 。在这一过程中我在 chenx 大佬的帮助下将 ._pth 文件中最下面一行注释取消了,如此一来便建立了外部链接与 python 文件之间的联系。

然而,运行结果仍然是找不到外部包,不过这一次报错的包不在是 Pyside6 ,说明大部分包还是没啥问题的。

这期间我检查了 requirements.txt ,结果发现通过 pipreqs 生成的 txt 文件内容不但不全,版本还和实际存在诸多偏差。于是我手动修改了相关包的描述,重新运行 bat 脚本。

结果这次的报错令人大跌眼镜,外部链接都全部找到了,但是我自己编写的内部链接却找不到,检查 ._pth 文件中的内容也发现当前目录 . 已经包含在 path 中了,怎么会找不到呢?这让我有些迷茫,不知所措。

但是,在我即将放弃折腾的时候,我突然意识到之前教程作者是让我们删除 ._pth 文件,而不是对它进行修改,所以我立刻执行了删除操作,并重新双击 bat 脚本。

这一次,程序完美的运行了。