本文為本人編譯打包 NovalIDE 過程的記錄,以防忘記
1. 源碼編譯步驟
1.1 克隆 NovalIDE 項目
# dev 分支下的文件
git clone https://gitee.com/wekay/NovalIDE.git
1.2 安裝 pipenv 虛擬環境管理
pip install pipenv
1.3 新建文件夾,在文件夾內進入命令行安裝虛擬環境
# 本文安裝虛擬環境的 python 版本為3.8
pipenv install --python 3.8
1.4 虛擬環境安裝相應開發依賴
pipenv install pywin32 --dev
pipenv install pyinstaller --dev
pipenv install psutil --dev
pipenv install watchdog --dev
pipenv install chardet --dev
pipenv install pyperclip --dev
pipenv install wmi --dev
pipenv install requests --dev
pipenv install pillow --dev
pipenv install six --dev
1.5 進入虛擬環境
從該步驟進入虛擬環境開始,后面步驟均在虛擬環境中完成
pipenv shell
1.6 進入到 NovalIDE 文件夾,運行 NovalIDE.py
cd NovalIDE
python NovalIDE.py
1.7 打包成 exe 文件
pyinstaller pyinstaller.novalide.python.spec
2. 編譯過程中遇到的問題
-
AttributeError: module 'time' has no attribute 'clock'
由于我使用的是Python3.8版本的,NovalIDE源碼中有使用time.clock(),Python3.8 不再支持 time.clock(),可將 time.clock() 替換成 time.perf_counter()
noval/util/utils.py, line 294, line 296
time.clock() -> time.perf_counter()
-
PermissionError: [Errno 13] Permission denied
我打包時出現了這個問題是因為我后臺運行了360程序,退出再重新運行一遍就可以打包成功了
-
ModuleNotFoundError: No module named 'distutils.version'
運行打包好的exe文件,出現該錯誤,是因為使用了
from distutils.version import ...
,所以沒有將 distutils.version 依賴打包在spec中的 hiddenimports 添加 distutils.version ,重新打包問題解決
a = Analysis(['NovalIDE.py'],
pathex=['./'],
binaries=[],
datas=datas,
hiddenimports=['noval.util.downutils','noval.python.pyeditor','noval.syntax.pat','site','noval.running','noval.shell','noval.roughparse','distutils.version'],
hookspath=[],
runtime_hooks=[],
excludes=['noval.util.command'],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher,
noarchive=False)