pyinstall打包相對路徑問題


pyinstall打包相對路徑問題

​ pyinstaller 打包py文件成exe文件,在沒有python的機器上運行,執行打包后的程序,經常會出現程序使用的圖標無法顯示,程序使用的關聯文件無法關聯。或者,在打包的本機上運行正常,但是將打包后的程序放到其它機器上就有問題。這些現象都很有可能是由程序使用的文件路徑發生改變產生的,因此在打包時候我們需要根據執行路徑進行路徑“凍結”。

1. 使用絕對路徑

​ 在python代碼中使用絕對路徑調用外部文件可以保證打包時候路徑可追溯,因此在本機上運行打包后程序基本沒問題。但是當本機上對應路徑的資源文件被改變,或者將打包程序應用到別的機器,都會出現搜索不到資源文件的問題。這種方式不是合適的打包發布python軟件的方式。

2. 使用凍結路徑

增加一個py文件,例如叫: frozen_dir.py

-*- coding: utf-8 -*-

import sys
import os

def app_path():
    """Returns the base application path."""
    if hasattr(sys, 'frozen'):
        # Handles PyInstaller
        return os.path.dirname(sys.executable)  #使用pyinstaller打包后的exe目錄
    return os.path.dirname(__file__)                 #沒打包前的py目錄

​ 其中的app_path()函數返回一個程序的執行路徑,為了方便我們將此文件放在項目文件的根目錄,通過這種方式建立了相對路徑的關系。

​ 源代碼中使用路徑時,以app_path()的返回值作為基准路徑,其它路徑都是其相對路徑。以本文中使用的python項目打包為例,如下所示: test.py

# -*- codling: utf-8 -*-

import os
import frozen_dir

def savelog(file,log):
    dirname = os.path.dirname(file)
    if not os.path.exists(dirname):
        os.mkdir(dirname)
    with open(file,'a',encoding='utf-8') as f:
        f.write(log+'\n')

if __name__=='__main__':
    file = frozen_dir.app_path()+r'\log\2.txt'
    print(file)
    savelog(file,'hello you')

    savelog(file,'文件路徑%s' %(file))

注意:

1、pyinstaller -D test.py 生成exe文件有效

2、pyinstaller -F test.py 只生成單獨exe文件無效


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM