现在开一个新的 Python 项目,哪个包管理器比较合适?哪种打包分发方式(不需要编译)比较合适?

2022-02-01 13:14:25 +08:00
 MiketsuSmasher
6458 次点击
所在节点    Python
27 条回复
learningman
2022-02-01 13:17:59 +08:00
推荐 poetry
poetry publish --build 就走了
ClericPy
2022-02-01 13:25:53 +08:00
除了楼上的, 貌似还有 flit, 被官方招安了
orange
2022-02-01 13:42:28 +08:00
关注
aloxaf
2022-02-01 15:26:13 +08:00
来用 pdm
liuhai233
2022-02-01 15:30:09 +08:00
docker 使用者表示万物皆可 docker, 一个 requirements.txt 就够了
ericgui
2022-02-01 15:37:25 +08:00
@liuhai233 有道理
learningman
2022-02-01 15:54:24 +08:00
@liuhai233 #5 alpine 装带 C 库的包容易炸,slim 就 300m 了。。。
SuperMild
2022-02-01 17:16:59 +08:00
看过 poetry 和 flit ,因为表面上看来 flit 比较简单我就选择了 flit ,使用过程中总的来说比较顺利。
ospider
2022-02-01 17:32:07 +08:00
pipenv 强烈不推荐。我以前是比较推荐的 poetry 的,但是遇到 bug 太多了,而且 resolve 起来特别慢。现在看起来 flit 应该是不错的。
sch1111878
2022-02-01 19:48:28 +08:00
@ospider pipenv 直接接触感觉还是很不错的, 和 npm cocoapods 有相似之处, 请问不推荐的原因是什么?
matrix67
2022-02-01 20:30:16 +08:00
@sch1111878 #10

python 包版本吃瓜

1. 没法单独更新包
2. 代码未动,文档( PR )先行
3. 卸载包更新
4. I have no idea.
5. 伪装官方
6. 喜欢烂尾
7. 速度慢 Lock 时间长
8. 对项目发展没有信心
9. Poetry?也不行
10. 没有任何官方和核心开发者支持
11. 未处理的 Issue/PR 太多

情报来源:
https://v2ex.com/t/777916
https://www.zhihu.com/question/322932995/answer/672812417
mekingname
2022-02-01 21:17:08 +08:00
Poetry 有一个很严重的问题,就是它的依赖在不同的系统会冲突。

例如,你使用 macOS 开发,通过 poetry add uvicorn 安装了这个包。

然后你到 Linux 系统上部署,如果你带上了 macOS 上面生成的.lock 文件,那么你执行 poetry install 安装以后,运行就会报错,因为它安装的这个版本是 macOS 的版本,在 Linux 上不能用。你必须先删除.lock 文件,再 poetry install 才能使用。
@learningman
neoblackcap
2022-02-01 21:19:56 +08:00
如果你目标平台是 Debian 系的 Linux 发行版,那么请使用 dh-virtualenv 工具构建一个 deb 包作为构建产物。
此方法是我认为相对较好的了。同理 Redhat 系的也可以去寻找相类似的工具,原理还是构建一个目标平台的包。

这种方法的优势在于,
1. 可以完全在构建机器上完成构建。
2. 对系统依赖极低,基本上只依赖 CPython 解析器,同时如果依赖第三方库,可以通过发行版的包管理器解决。
3. 打包的产物基本上就是你要部署的文件,一般情况下可以做到比 Docker 镜像更小
4. 可以编写 Systemd/init.d 脚本,部署的时候一并部署了,完全做到通过系统命令来管理程序生命周期( start/stop/restart)
5. 可以更加容易地部署静态资源文件,而不用考虑资源文件在项目中的组织或者所在相对目录
learningman
2022-02-01 21:28:05 +08:00
@mekingname #12 没遇到过这个问题。。。至少对我而言,Windows 的项目在 Linux 运行正常
arischow
2022-02-01 22:05:51 +08:00
@mekingname #12 这个我感觉不太可能吧……
ispinfx
2022-02-01 23:09:30 +08:00
@mekingname poetry 不就是用来解决这些问题的吗…怎么可能…没遇到过…
felixcode
2022-02-02 04:32:26 +08:00
@mekingname
是不是碰到 x86 和 arm 的问题了
ericgui
2022-02-02 08:08:00 +08:00
pip 有什么问题吗
Macv1994
2022-02-02 11:45:00 +08:00
我还是原始的 pip🐶
liuhai233
2022-02-02 20:25:21 +08:00
@learningman 确实,前司 python 项目镜像装完依赖 2GB

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/831583

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX