1、解决 "from utils.xx import xx " 的方案
2、dev与打包后读写路径问题
3、mac下gui与打包选择
文件目录如下
utils 文件夹作为一个package,必须包含一个 __init__.py 文件
如何解决在main.py中 from utils.tools import myPrint ?
在main.py 最前面写上
# -*- coding: utf-8 -*-
import sys
import os
sys.path.append(os.path.dirname(os.path.dirname(__file__)))
在 utils/tools.py的最前面写上
# -*- coding: utf-8 -*-
import sys
import os
sys.path.append(os.path.dirname(os.path.dirname(__file__)))
然后就可以
在main.py 中 from utils.xxx import xxx
在utils/xx.py 中 from utils.xx import xx
好处是不用修改系统的环境配置,打包后的时候 import 同样有效代码不会出错。
打包后的文件读写路径问题
利用 sys.argv[0] 获取 程序运行的目录
run_file_path = sys.argv[0]
arr = run_file_path.split('/')
del arr[len(arr)-1]
run_dir = '/'.join(arr)
比如 main.py / gui.app 放在 /user/alice/python 文件夹下。不管我们在哪个目录运行main.py / gui.app 时,从上述代码可以获取 run_dir : '/user/alice/python'。
gui 与 打包方案选择
gui: 选择 tkinter
打包:选择pyinstaller . 为什么不选择py2app?因为mac 深色模式下打包后界面很奇怪一团黑;并且打包还会出现modules not found 的问题,明明是一些根本没用到的模块。
1、如果程序打包后需要命令行交互
pyinstaller --onefile --clean --noconfirm ./src/main.gui.py
打包结果是一个没有后缀的可执行文件,启动的时候直接点到那个文件然后回车 (比如 先cd 到文件所在目录,然后 ./main , 回车)
2、如果不需要命令行交互,直接打包成一个.app程序。
pyinstaller --windowed --onefile --clean --noconfirm ./src/main.gui.py
使用的时候直接双击就打开了,和其他mac上的app一样。