不懂就问,关于 Python web 项目发布

2021-04-25 15:12:38 +08:00
 feitxue
目前刚接手了一个基于 tornado 的 python web 项目
之前一直搞 java 开发
要后续发版维护 小公司没有专职运维
问下各位大佬
python 有没有类似 java -jar 这种发布方式
直接本地打包 jar 上传到服务器然后直接运行
服务器只需要有 java 环境就行
大概搜了下资料看了下
要么上传到公共的 pypi,要么自建私有 pypi
我理解的是部署类似 maven 的仓库环境
感觉还是麻烦了点
ps:我们目前用 svn 管理代码
5333 次点击
所在节点    Python
42 条回复
ytmsdy
2021-04-25 22:49:14 +08:00
把代码搞到 github 上面,然后用 action 发布。合并到 master 分支就自动发布。不用管。
qile1
2021-04-26 00:03:05 +08:00
@robot1 fastapi 可以用 pyibstall 不?
hushao
2021-04-26 03:38:02 +08:00
楼上的哪有那么多事,tornado 本身做 web 服务器就不错,直接 pip 安装依赖之后,指定好端口,python main.py 运行就可。熟悉之后,再想怎么搞怎么搞。
ila
2021-04-26 08:10:32 +08:00
用 pip download 吧依赖包下载到本地,写个 requirement 文件和安装脚本,在服务器运行。
zjsxwc
2021-04-26 08:36:46 +08:00
git pull + 重启
robot1
2021-04-26 09:20:41 +08:00
@qile1 Fastapi 没用过 twisted 和 tornado 没问题
David1119
2021-04-26 09:32:19 +08:00
这不是本末倒置吗?脚本语言还想着去打包发布???你 php 会打包再发布吗?
tabris17
2021-04-26 09:39:04 +08:00
python 的第三方模块可能有二进制代码,如果开发环境和服务器环境有差异,打包的话可能会有问题。还是 docker 吧
feitxue
2021-04-26 09:59:51 +08:00
@David1119 #27 明白了...之前没搞过脚本语言发布....沉沦于 java,思路搞错了.感谢.
SlipStupig
2021-04-26 10:27:31 +08:00
@feiandxs docker 需要学习一堆东西,还需要搞 Jenkins 那套,本身这个事干成了收益很低的,不值得额外去学
est
2021-04-26 10:30:35 +08:00
python 项目不是简单的 jar,一般都包含了类似 JNI 的操作。

LZ 节哀
z740713651
2021-04-26 10:40:02 +08:00
@SlipStupig #30 简历驱动开发,学完 docker,搞上 jenkins,事成后,简历多好看,又会个技能。

再一个 ,python 可能有环境变量 ,平台等不同导致一些包表现不同的情况。
做预防最好的方法还会上 docker,保证运行环境一样。
fiht
2021-04-26 11:04:00 +08:00
docker + rancher

每次打包生成新的 Tag 号,用过 rancher API 部署。
除了问题可以直接回滚,很方便。
WhoMercy
2021-04-26 11:17:57 +08:00
如果部署环境是离线的且和开发环境隔离,就没法使用 git,不好解决。
SjwNo1
2021-04-26 13:46:31 +08:00
@z740713651 jenkins 对 python 项目友好吗 不太懂
chenqh
2021-04-26 13:54:02 +08:00
@xiqingongzi 但是 docker 也需要私有镜像的吧,没有私有镜像怎么办?
z740713651
2021-04-26 14:10:15 +08:00
@SjwNo1 #35 我这边只是个 CICD 的工具 还是挺好用的吧
jenkins 只是说 测试-打包-发版-部署 都由 jenkins 的流水线来完成
对其他语言项目应该都是一样的


CICD 工具其实还有几个
github 也有个 action 功能
我个人的项目就白嫖 github 的这个功能了
aristolochic
2021-04-26 14:30:21 +08:00
以前 Ruby 生态搞出来的基于 ssh 的部署工具 Capistrano 流行过一段时间,依靠插件简化的部分大概是拉取版本管理系统的提交、保留多个版本供回滚用、多版本共享目录、自动运行 migration 等等,还有生成和自动重启中间件 /应用服务器( Python 的话就是 WSGI,Ruby 就是 Rack,PHP……是啥不知道,没用过) systemd 服务,还有生成 Nginx 配置啥的(不过感觉提供 systemd 和 Nginx 管理的插件就是用来给不怎么懂这些东西的人一个开箱即用的最佳实践,有需要可以手动编辑)。当时不止 Ruby on Rails 的人在用,PHP 和 Python 也有一些。当然现在也不是不能用,就是装 Ruby 和熟悉 Ruby 不是很多人都能接受(因为 Ruby 生态的东西,配置文件一般也是 Ruby 造的 DSL )

小规模的话最好不用也没必要,但是理念可以参考一些,比如利用软链接在多个版本间共享前端资产、用户上传的图片等公共资源、数据库 Schema 和服务器 pid 和 socket 文件目录等等,不知道怎么写 Systemd service 也可以照抄,Nginx 配置也可以照抄(虽然现在可能用 Caddy 和 HAProxy 的多了?),还有写点脚本来搞点服务端的自动化之类的

要是不痛恨 Docker 的话,就 Docker 得了
tfdetang
2021-04-26 14:54:02 +08:00
@SlipStupig 又不需要学的多精通。组里的实习生让他们花了 2 天看了下,基本就无障碍的使用了,能有多大成本
xiqingongzi
2021-04-26 18:22:22 +08:00
@chenqh 那就打包成 image,然后 export 为 tar
然后在服务端再 load 进去就行,麻烦点,但可以实现。

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

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

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

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

© 2021 V2EX