[困惑] 写好的 Python 应用如何分发?

2024-01-04 09:48:43 +08:00
 yinlei212

场景: 我写好了一个应用的所有代码,我需要进行分发给我的客户,但是我不想让他们得到源码。请问如何操作?, 有没有全平台统一方案(win/mac/linux)?

已知的分发场景:

  1. 源代码分发,直接上传 pypi ,或者 git 让使用。(源码分发不合适)
  2. windows 的话打包成 exe 进行分发(但是这个仅仅只是 windows 平台的)。
4159 次点击
所在节点    Python
33 条回复
shinession
2024-01-04 09:57:46 +08:00
pyinstaller+1, 环境什么的都集成进去了, 方便快捷
locoz
2024-01-04 10:00:37 +08:00
前几年的 pycon 我记得有一届里有人介绍了个他的产品,专门做 python 代码打包+混淆/加密的,忘记叫啥了,你可以翻一下
Etuloser
2024-01-04 10:13:50 +08:00
pyinstaller 分别打 win 平台和 linux 平台的包
fzls
2024-01-04 10:27:31 +08:00
用 pyinstaller 就好了
Lighthughjiajin
2024-01-04 10:43:24 +08:00
pyinstaller 能保护源码吗?
009694
2024-01-04 10:48:58 +08:00
核心源码想要保护要么用 c 这类编译成动态库用 python 调,要么服务化。
myxingkong
2024-01-04 10:59:10 +08:00
可以使用 Cython 将 Python 源文件 编译成 动态链接库(.pyd|.so),再使用一个入口文件(不需要编译)去调用你的 app 的启动方法。

main.py
```python
import sys
import my_app

sys.exit(my_app.run())
```

main.py 可以使用 Pyinstaller 单独打包成可执行文件,然后把使用 Cython 编译好的 动态链接库 放到可执行文件的同级目录下,就可以运行了。
cooljiang
2024-01-04 11:08:35 +08:00
程序整体用 pyinstaller 的打包的分发的话会有被反编译的风险(很容易被反编译)
结合楼上说的用 Cython 将 py 编译成动态链接库(.pyd/.so)外,楼主如果想进一步保护 py 分发程序,还可以考虑针对 Python 解释器单独进行加密混淆。
liuhai233
2024-01-04 11:10:07 +08:00
做成 saas 服务 ^-^
lingeo
2024-01-04 11:11:15 +08:00
cython 可以编译成.so ,但是就是没法跨平台,你得分开编译。
ohayoo
2024-01-04 11:51:24 +08:00
@locoz #2 是的,你说的这个 我也有印象
Abbeyok
2024-01-04 12:39:10 +08:00
pyarmor
bthulu
2024-01-04 13:51:09 +08:00
编译成 native 就行了
orcal
2024-01-04 14:25:55 +08:00
Nuitka 吧,简单高效全平台
airchaoz
2024-01-04 14:31:30 +08:00
@orcal 之前用过这个,打包没有 pyinstaller 方便,不知道现在怎么样了
orcal
2024-01-04 14:41:14 +08:00
还是没有 pyinstaller 方便哈哈
dianso
2024-01-04 14:52:34 +08:00
太繁琐,依赖,库

我已经全面转 go

就是看在开发迅速,编译单文件,不依赖 libc ,直接全平台分发
Alicewish
2024-01-04 15:14:19 +08:00
nuitka ,如果有复杂点的库那么打包成功率比 pyinstaller 高。
mnsw
2024-01-04 15:32:07 +08:00
@shinession #1 但这个只能本平台打包本平台的吧?不能跨平台
lybcyd
2024-01-04 15:41:25 +08:00
单靠 pyinstaller 不行,这个反编译很简单的,想要保护源代码肯定还要混淆加密

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

https://tanronggui.xyz/t/1005684

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

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

© 2021 V2EX