您好,登錄后才能下訂單哦!
利用Python怎么打包含靜態(tài)文件?很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來(lái)學(xué)習(xí)下,希望你能有所收獲。
已搭建了PyPI私有庫(kù),上傳公共庫(kù)包含靜態(tài)文件,如需要使用sql靜態(tài)文件初始化數(shù)據(jù)庫(kù)。
打包python包,給其他人使用,但項(xiàng)目中包含靜態(tài)文件,如html。
解決靜態(tài)文件讀取問(wèn)題
解決靜態(tài)文件打包問(wèn)題
Python3.8
PyCharm 2020
創(chuàng)建項(xiàng)目
展示靜態(tài)文件讀取問(wèn)題
解決方案
展示靜態(tài)文件打包問(wèn)題
解決方案
1. 創(chuàng)建項(xiàng)目
創(chuàng)建一個(gè)demo項(xiàng)目(text-setup),目錄如下
test-setup
demo
\_\_init\_\_.pydemo.pydemo.txt
/demo/demo.txt
The text is from demo.txt.
/demo/demo.py
import os def get_txt(): """使用原始打開(kāi)io方式打開(kāi)""" with open('demo.txt', 'r', encoding='utf-8') as f: return f.read() def get_demo_txt(): """修改獲取路徑方式,使用io打開(kāi)""" current_dir = os.path.dirname(__file__) file_path = os.path.join(current_dir, 'demo.txt') with open(file_path, 'r', encoding='utf-8') as f: return f.read() if __name__ == "__main__": """類(lèi)內(nèi)測(cè)試,均無(wú)異常""" print("get_demo_txt() :", get_demo_txt()) # get_demo_txt() : The text is from demo.txt. print("get_txt() :", get_txt()) # get_txt() : The text is from demo.txt.
在當(dāng)前路徑下執(zhí)行demo.py文件沒(méi)有異常(使用PyCharm直接右鍵run)
2. 展示靜態(tài)文件讀取問(wèn)題
在根目錄(或其他任意除demo.py文件路徑)執(zhí)行上面的demo.py文件就會(huì)報(bào)錯(cuò)
$ python demo/demo.py get_demo_txt() : The text is from demo.txt. Traceback (most recent call last): File "demo/demo.py", line 21, in <module> print("get_txt() :", get_txt()) # get_txt() : The text is from demo.txt. File "demo/demo.py", line 6, in get_txt with open('demo.txt', 'r', encoding='utf-8') as f: FileNotFoundError: [Errno 2] No such file or directory: 'demo.txt'
明顯看出
直接使用相對(duì)路徑讀取靜態(tài)文件的方式報(bào)錯(cuò)
使用os.path.dirname(\_\_file\_\_)獲取當(dāng)前python文件路徑并拼接的方式不會(huì)報(bào)錯(cuò)
3. 解決方案
使用os.path.dirname(\_\_file\_\_)的方式去獲取當(dāng)前python文件路徑,再去拼接靜態(tài)文件的路徑
demo中將get_txt()方法刪除,繼續(xù)進(jìn)行以下打包demo
4. 展示靜態(tài)文件打包問(wèn)題
打包,創(chuàng)建打包配置文件
/setup.py
from setuptools import find_packages, setup setup( name='demo', version='1.0.0', packages=find_packages(), zip_sage=False, )
執(zhí)行打包命令
$ python setup.py sdist
打開(kāi)打包信息文件,內(nèi)容如下
/demo.egg-info/SOURCES.txt
setup.py demo/__init__.py demo/demo.py demo.egg-info/PKG-INFO demo.egg-info/SOURCES.txt demo.egg-info/dependency_links.txt demo.egg-info/top_level.txt
可以看出,demo.txt并不在資源文件中,可以實(shí)際試一下,其他項(xiàng)目引用這個(gè)文件執(zhí)行獲取文件也將報(bào)錯(cuò)FileNotFoundError
5. 解決方案
修改打包配置文件
/setup.py
from setuptools import find_packages, setup setup( name='demo', version='1.0.0', packages=find_packages(), zip_sage=False, include_package_data=True, # 打包包含靜態(tài)文件標(biāo)識(shí) )
增加配置文件
/MANIFEST.in
include demo/demo.txt
最終文件目錄
test-setup
demo
\_\_init\_\_.pydemo.pydemo.txtsetup.pyMANIFEST.in
再次執(zhí)行打包命令
$ python setup.py sdist
打開(kāi)打包信息文件,內(nèi)容如下
/demo.egg-info/SOURCES.txt
MANIFEST.in setup.py demo/__init__.py demo/demo.py demo/demo.txt demo.egg-info/PKG-INFO demo.egg-info/SOURCES.txt demo.egg-info/dependency_links.txt demo.egg-info/top_level.txt
看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝您對(duì)億速云的支持。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。