
新手求问,手头只有 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 装 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 fang2hou 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 楼下网吧 付费开发 效率提高 岂不美哉 |
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 准备工作,下载 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 丢 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 某鱼上随便找个人帮你编译一下得了,不到百行代码编译一下,五块钱肯定有人愿意做 |