![]() |
1
bronyakaka 57 天前 ![]() 我知道的 pyinstaller 打包
|
![]() |
2
qilme 57 天前 via Android ![]() 绑定 pyw 就行
|
![]() |
3
ModiKa2022 56 天前
安装一个 pyenv, 直接使用 pyenv use {对应的 python 版本} 使用 python xx.py 运行
|
![]() |
4
UncleCAT4 56 天前 via Android
黑框是 cmd 吧我记得,可以用 pyinstaller 打包
|
![]() |
5
pursuer 56 天前
调用命令行是符合预期的行为,你说的黑框只是会 AllocConsole. 绑定 pythonw 就会隐藏 Console 了。
|
![]() |
6
barkure 56 天前 via Android
pythonw
|
7
fbichijing 56 天前
你的描述好奇怪啊。我觉得 Linux 系统和 Windows 系统调用 .py 的方式本质上一样的啊。
运行 .py 文件: 1. 通过该该文件的绝对路径; 2. 如果该文件所在的路径在 path 里面,则可以直接使用文件名; 所以两者没区别吧。 你在 linux 调用没有黑框,那是因为是在 console 里面调用运行的。Windows 如果在 console 里面运行也没有黑框啊(本身 console 就是)。 而至于在 Windows 下双击运行没黑框,将文件后缀改一下就好了。.py > .pyw 。一直都是这么做的吧。自己写的 .pyw 的 gui 如果本地跑而不想打包的话。 --------- "但是在 windows 下面,要绑架 py 的处理器,也就是 python,然后直接 xx.py 会直接弹出一个黑框,估计是在黑框里 调用了命令行了,这个肯定是不符预期的,毕竟如果出错了,什么也不知道." 这个部分是想表达:linux 下运行 .py 脚本有错误的时候,黑框存在,而 windows 下会一闪而过? 如果是这样的话,不是必然的吗?在 Windows 里面先打开 console 再运行 .py 文件,异常的话也能被 catch 到。 ------ 出于我自己对你表述的部分产生的某种思考的延伸,可能你是想表达:在 Windows 下,双击 .py 文件运行了某个脚本,但是异常就直接一闪而过,无法获得异常原因。不知道这是不是你想表达的问题? 如果这是你想表达的问题之一的话: 一般都是类似与这种形式(脚本类而不是 gui): ```python def main(): pass if __name__ == '__main__': try: main() except: # 异常代码自己写,或可以通过 traceprint 输出详细信息 pass finally: # 最后,将黑窗口停住就行了。好像 C 语言也是这么玩的吧。 os.system('pause') ``` 全局运行的常用的逻辑如果写成脚本的话,还是通过 setup.py 打包成全局命令。可以获得很大的灵活性,同时也直接适配多个系统。我觉得这样做比较有趣。 |
8
chenqh OP |
10
volvo007 55 天前
如果需要黑框,而且也不介意以 python xx.py 的方式运行的话,可以写一个 .bat 文件,把需要的内容包在里面。
@echo off call c:\xxx\miniconda3\Scripts\activate.bat c:\xxx\miniconda3\your_env call conda activate your_env call python path\xxx.py pause 这样应该可以,具体细节可以再搜一下,但是应该是可以跑起来并且 cmd 框不会消失的。这两天我刚这么写过一个 这里的关键一个是如何调用需要的 py 环境(通过 call 一个 conda 的 script ),另一个就是黑框不消失(通过 pause ),这样运行需要你手动 ctrl+c 才会提示退出 |
![]() |
11
PixelWanderer 55 天前
linux 是因为前面有#!/usr/bin/python 吧
|
12
chenqh OP @PixelWanderer 是的..
|
13
yinmin 55 天前
|