新手求问,手头只有 M 芯片的 Mac 电脑,装虚拟机也只能装 arm win,我写了一个非常简单的 python 脚本,想把它放在公司的不联网的 x86_64 win10 上使用,最简单的方法是什么? 麻烦有时间的大佬们说详细一点,谢谢
1
musi 2023-07-14 18:52:15 +08:00 via iPhone
下 x86 的 Python 然后一起打成一个压缩包,写个 bat 解压执行
|
2
sadfQED2 2023-07-14 18:52:57 +08:00 via Android
?????
python 脚本跟你 cpu 又没有半毛钱关系,你 win 电脑装个 python 解释器不就能运行了 |
3
fulei OP @musi 能详细一点吗?我是 brew 安装的 python, 怎么知道是 x86 的还是 arm 的?怎么打包? bat 我也不会..
|
5
aptx4689 2023-07-14 19:01:41 +08:00 1
装 powershell ,把 python 用 powershell 重写一遍
|
6
fulei OP @aptx4689 请问 powershell 是 win 10 自带的吗?我 python 用到的 chardet tqdm 这些库,在不能联网的公司电脑上,也没法下载
|
7
baobao1270 2023-07-14 19:04:47 +08:00
pyinstaller 打包试试?
|
8
harrozze 2023-07-14 19:05:07 +08:00
|
9
sadfQED2 2023-07-14 19:05:08 +08:00 via Android
|
10
harrozze 2023-07-14 19:05:41 +08:00
https://towardsdatascience.com/how-to-use-manage-multiple-python-versions-on-an-apple-silicon-m1-mac-d69ee6ed0250
这篇里说的可能能解决你的问题,如何在 m 芯片的 mac 里运行 x86 程序 |
11
fulei OP @baobao1270 我上网搜索方法的时候见过这个,我理解的意思是,在 Mac 能打包 Mac 平台能用的,Linux 能打包 Linux 能用的,我要想在 win 上用,需要在 win 上装 pyinstaller ?但是我没有 win 电脑。
|
13
harrozze 2023-07-14 19:09:33 +08:00
@harrozze #10 不对,你在 mac 里跑不了 windows 的 python ,除非你对 py2exe 弄出来的打包文件很熟,否则还是会比较麻烦。
|
15
houshuu 2023-07-14 19:17:53 +08:00
简短的话, 建议用 go 或者别的支持交叉编译的语言重写, 对于非联网设备, 一劳永逸
|
16
ysc3839 2023-07-14 19:19:16 +08:00 via Android
直接安装一个 Python 不就能运行了吗?
|
17
cnbatch 2023-07-14 19:20:22 +08:00 via Android
没错,Win10 自带 PowerShell 。其实 Win7 开始就自带了。
|
18
fulei OP @houshuu 非常短,83 行。我完全不懂 go, 请问用 go 写的东西,可以在 m 芯片 Mac 上编译出 x86_64 win10 可用的可执行文件吗?可以的话,我去学习下
|
20
richarddingcn 2023-07-14 19:22:15 +08:00
啊?是我有问题还是咋的
都非常简单的 python script 了 是用到什么不能跨平台的依赖了么 直接 win 上装个 python 直接运行 .py 文件不就行了 |
22
fulei OP @cnbatch PowerShell 是写 bat 脚本的吗?不引用外部的库是不是实现不了啊,我有用 pip install chardet tqdm 这两个东西
|
23
ClericPy 2023-07-14 19:23:49 +08:00
下个绿色版 python 解释器, 然后用 zipapps 或 shiv 打包个 pyz. 到机器上用解释器运行 pyz 就行了. pyz 里带了依赖和原代码包
但是如果依赖里有 .pyd/.so 之类的, 以及 C-lib 之类的, 就麻烦一些, 去 pypi.org 下载 whl 到目标机器安装 |
25
JensenQian 2023-07-14 19:24:03 +08:00 1
楼下网吧
付费开发 效率提高 岂不美哉 |
26
suarezding 2023-07-14 19:24:31 +08:00
@fulei 类似的单位,我来回答一下吧,应该是在本地 m 芯片电脑上开发了一个 python 脚本,需要在内网 x86 win10 上离线运行吧?
我个人的话,也建议代码行数不多的情况下,使用 Go 重构,参考这个代码量,应该不复杂,使用系统库能完成,功能也比较简单,Go 也很容易上手.可以在 m 芯片上交叉编译出目标电脑上的 exe 程序. |
27
ysc3839 2023-07-14 19:24:59 +08:00 via Android
@fulei 限制多大? Python Windows 版有个嵌入式的包,也就 10MB 左右,自己打包的话未必会更小。
|
28
elechi 2023-07-14 19:25:23 +08:00
虚拟机装个 windows ,arm 版的也行;调试通过之后放到目标机上用就行
|
29
louzhichen 2023-07-14 19:25:44 +08:00
找一个大神,让他用一块磁铁直接操作硬盘,写出 python 解释器,然后你就可以用了。
|
30
liantian 2023-07-14 19:26:29 +08:00 5
准备工作,下载 windows embeddable 版本的 python ,3.8 以后的版本官网都有。
1. 在 mac 上,pip freeze > requirements.txt 导出依赖 2. 在 mac 上,pip download --platform win64 -r requirements 。txt 下载 windows 版本的依赖。 3. 下载 pip ,https://bootstrap.pypa.io/get-pip.py 将上述文件拷贝到 windows ,方法你随意。 解压 windows embeddable 版本的 python 修改掉 pth 文件。取消注释 import site 然后 python.exe get-pip.py 安装 pip 然后 python.exe -m pip install -r requirements 。txt --no-index --find-links D:/下载/的/依赖/的/路径 完事 |
31
cnbatch 2023-07-14 19:28:08 +08:00 via Android
既然你自己就有 Arm Windows 虚拟机,打开看一下不就知道了。
PowerShell 和 bat 是两回事。 PowerShell 除了 PS 自带命令,还可以调用 .net 类库,就是麻烦点。 bat 无法调用 .net 类库,它就是个 cmd 的脚本而已。 |
32
aisk 2023-07-14 19:34:34 +08:00
用 nuitka 编译成二进制试试
|
33
xuc 2023-07-14 19:35:07 +08:00 via Android
Mac 能联网对吧,开台云电脑(比如腾讯轻量云、阿里无影云桌面,都有新手优惠)
|
34
musi 2023-07-14 19:37:24 +08:00
@fulei #3 google 一下 python 官网,在里面找到对应的可执行文件,然后 bat 的话你问问 gpt 应该能给你生成一个完整的脚本
|
35
xuc 2023-07-14 19:39:39 +08:00 via Android
没说完,开台 Windows 系统的云电脑,然后你就可以打包成需要的 exe 文件了,打包方法相信你也已经查过了
|
36
misaka00001 2023-07-14 19:40:51 +08:00 via Android
|
37
fulei OP @liantian 感谢 “修改掉 pth 文件。取消注释 import site“ 这个我不太理解,我网上搜了下,指的是 Windows embeddable 版本的 Python 目录中 sitecustomize.py 这个文件吧。我上班用这个方法尝试下。
|
39
fulei OP @misaka00001 请问我在左边黏贴了 python 代码后,点击 convert button ,得到右边转换的代码,我应该怎么用?有时间的话请给我多少两句,需要下载什么,需要做什么,我去搜索学学。感谢
|
41
18601294989 2023-07-14 20:05:58 +08:00
chatgpt 把 python 转成 golang
|
42
dianso 2023-07-14 20:10:37 +08:00
闲鱼找人,最多 100 块钱就弄好了
|
44
mm163 2023-07-14 21:14:33 +08:00
arm win 不是直接能运行 amd64/x86 吗?
在 arm win 下用 x86_64 版本的 Python 工具开发和打包转 exe 不就得了。 |
45
harrozze 2023-07-14 21:14:55 +08:00
@fulei #39 右边的代码 copy 出来,在你 mac 上装个 go ( https://go.dev),然后用 go 交叉编译成 x86_64 windows 的程序
`GOOS=windows GOARCH=amd64 go build -o bin/app-amd64.exe app.go` |
46
harrozze 2023-07-14 21:15:53 +08:00
@fulei #39 golang 是静态链接,编译出来的东西会比较大。不过我也没比较过 py2exe 编译出来的大小和 go 版本有多大差距
|
47
harrozze 2023-07-14 21:17:34 +08:00
@liantian #30 感觉这个答案比较靠谱,如果你 import 的依赖包比较多的话,转成 golang 不知道能不能完全找到替代的包。
|
48
dcsuibian 2023-07-14 21:22:30 +08:00 via Android
楼主应该是想分发.exe 文件,而不是分发 python 源代码
|
49
fulei OP @dcsuibian 分发是什么意思,我不是行业内的,太专业的我搞不懂。我有一项工作内容是从系统里导出一个压缩包,解压后是将近 2 百个 csv 文件,每个 csv 文件里有 1 万行。然后拿这些数据进行下一步。但是它文件个数太多了,鼠标点半天,我就想把那些近 200 个文件每 70 个合并成一个文件,这样我的工作量就会减少很多。
|
52
aptx4689 2023-07-15 00:33:40 +08:00
@fulei 你说的这些工作完全可以用 powershell 写一遍,不会的话问下 chatgpt 4.0 就好了,python 引入一堆包很麻烦的
|
53
aptx4689 2023-07-15 00:34:03 +08:00
而且 powershell 也有 mac 版本,可以供你测试
|
54
zx945 2023-07-15 00:45:09 +08:00 via iPhone
借一个别人的 windows 电脑安装 Python 环境,然后用 pyinstaller 打包成 exe 拷到目标电脑上,不过打包出来的 exe 最小也得 10MB 以上了,不知道所谓的只能上传小文件是有多小
|
55
zx945 2023-07-15 00:48:33 +08:00 via iPhone
或者换一个思路,联系公司 IT 申请在内部系统上配置好 python 环境以及自己这个脚本需要的包,这样貌似更合规一些
|
56
fox0001 2023-07-15 00:48:37 +08:00 via Android
类似的需求,我会用 go 去写。Linux 下,go 源码可以编译成对应各个主流系统平台的可执行文件。
|
57
zx945 2023-07-15 00:57:24 +08:00 via iPhone
|
58
ryd994 2023-07-15 04:40:13 +08:00 via Android
运维 Windows 电脑非要用 MacOS ,这不是给自己找麻烦吗?
让公司配台 Windows 电脑或者楼上说的,远程桌面 如果你非要用 MacOS ,那我尊重你的命运 |
59
95276 2023-07-15 05:20:55 +08:00 via iPhone
用 go 写,交叉编译是最方便的。
|
60
bef0rewind 2023-07-15 07:25:58 +08:00
建议你走涉密流程,安全无小事。
|
61
mariahlamb31 2023-07-15 07:27:31 +08:00
可以使用 PyInstaller 、cx_Freeze 等工具将脚本打包成跨平台可执行文件,然后在 Mac 上生成适用于 win10 的可执行版本。
在 Mac 上通过虚拟机软件(VirtualBox 、VMware 等)或用 Docker 创建 win10 虚拟环境,在其中运行 Python 脚本。 将 Python 脚本部署到公有云服务商(AWS 、Azure 、GCP 等)提供的 win10 云主机实例上运行。 |
62
minamike 2023-07-15 08:05:36 +08:00
为什么不问问神奇的 ChatGPT 呢
|
63
sunrisewestern 2023-07-15 08:14:06 +08:00
你如果有调用包的话,就算几行的 python 脚本打包完也有几百 MB
|
65
m1klos 2023-07-15 08:59:03 +08:00 via Android
借一台 Windows 或者去网吧或者瞅瞅有没有免费试用的云电脑
|
66
charlieethan 2023-07-15 09:09:24 +08:00
这还不容易,用 GitHub CI ,运行环境使用 windows-2022 ,用 pyinstaller 命令行打包即可
|
67
iOCZ 2023-07-15 09:21:45 +08:00
用 git workflow 打包成 exe
|
68
tairan2006 2023-07-15 10:03:37 +08:00
@fulei #18 把 Python 脚本贴给 chatgpt ,让它翻译成 go ,然后`CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go` 交叉编译成 windows 的 exe 。
|
69
iorilu 2023-07-15 10:17:46 +08:00
要么花钱找人编译下
要么下载个 python 到那个 win 上装下, 把代码拷过去 |
70
ctro15547 2023-07-15 10:26:27 +08:00
有没有可能 云一台桌面电脑打包一个 exe , 按时计费的那种才几块钱一小时 足够打包了
|
71
rming 2023-07-15 10:27:37 +08:00
1. 学习 rust 或者 go 2. 重写这段代码
|
72
hefish 2023-07-15 10:33:52 +08:00
买一台 x86 的电脑嘛。
用完再卖掉。 能用钱解决的事儿,都不叫事儿。 |
73
GeruzoniAnsasu 2023-07-15 10:37:33 +08:00
重保是吧
我干过类似的,而且我的 python 脚本更长,200 行左右 最后的解决方法是想办法让单位内部装上了 py 和 vscode ,然后把我手机放旁边对着抄了一遍。 当然了,我是纯内建库实现的,别想着用第三方包,那是给自己挖坑。 如果有界面或可视化需求,那就想办法渲染一个 html 出来,http 服务用内建库也完全够写了。 我当初差点还要手撸 html parser ,不过后来想想反正我要扒的目标网页也就那么一两个,于是用更 hard coded 的方式糊过去了 |
74
Hopetree 2023-07-15 10:52:15 +08:00
用 pyinstaller 打包,在什么平台打出来的包就可以在什么平台运行,所以你找个 x86_64 的平台打包就行
|
75
brookegas 2023-07-15 13:05:34 +08:00
#36 楼 是终极答案
1 、将 python 代码自动转成 Go 代码 2 、使用 Go 的交叉编译,直接输出 windows 版本的 exe 文件 |
76
ch2 2023-07-15 13:44:03 +08:00
github action 编译
|
77
Lychee0 2023-07-15 14:51:27 +08:00 via iPad 1
丢 GitHub Action 拿 Pyinstaller 打包下就好,看 OP 描述应该不会有什么大坑。给个示例:
``` name: CI # Controls when the workflow will run on: # Triggers the workflow on push or pull request events but only for the "main" branch push: branches: [ "main" ] paths-ignore: - '**.md' - 'LICENSE' pull_request: branches: [ "main" ] paths-ignore: - '**.md' - 'LICENSE' # Allows you to run this workflow manually from the Actions tab workflow_dispatch: jobs: CI: strategy: matrix: python-version: [ "3.10" ] os-version: [ "macos-latest", "windows-latest", "ubuntu-20.04" ] runs-on: ${{ matrix.os-version }} steps: - uses: actions/checkout@v3 with: submodules: recursive - uses: actions/setup-python@v4 with: python-version: ${{ matrix.python-version }} architecture: x64 - name: Build run: | pip install -r requirements.txt pip install pyinstaller python -m PyInstaller -F -n PKGName -i __main__.py - name: upload uses: actions/upload-artifact@v3 with: name: PKGName-${{ matrix.os-version }} path: dist ``` |
78
Lychee0 2023-07-15 14:53:03 +08:00 via iPad
缩进被吞了 hhh 按 yaml 和 action 要求改下吧
|
79
loveuer 2023-07-16 21:45:52 +08:00 via Android
@aptx4689 我最近正好遇到这个问题了,ps1 脚本在 win11 上默认不能通过左键或者右键点击运行了,需要提前开启允许运行才行,这对小白来说有点不太现实。考虑换 tinygo 生成 exe ,但是不能动态生成就没找到更好的方案
|
80
JustBecause 2023-07-16 22:21:59 +08:00
某鱼上随便找个人帮你编译一下得了,不到百行代码编译一下,五块钱肯定有人愿意做
|