最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

淺析Python打包時包含靜態(tài)文件處理方法

 更新時間:2021年01月15日 10:23:16   投稿:mrr  
這篇文章主要介紹了Python打包時包含靜態(tài)文件處理方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

使用場景

  1. 已搭建了PyPI私有庫,上傳公共庫包含靜態(tài)文件,如需要使用sql靜態(tài)文件初始化數(shù)據(jù)庫。
  2. 打包python包,給其他人使用,但項目中包含靜態(tài)文件,如html。

解決步驟

  1. 解決靜態(tài)文件讀取問題
  2. 解決靜態(tài)文件打包問題

環(huán)境

Python3.8

PyCharm 2020

demo項目為例

  • 創(chuàng)建項目
  • 展示靜態(tài)文件讀取問題
  • 解決方案
  • 展示靜態(tài)文件打包問題
  • 解決方案

1. 創(chuàng)建項目

創(chuàng)建一個demo項目(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():
  """使用原始打開io方式打開"""
  with open('demo.txt', 'r', encoding='utf-8') as f:
    return f.read()

def get_demo_txt():
  """修改獲取路徑方式,使用io打開"""
  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__":
  """類內(nèi)測試,均無異常"""
  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文件沒有異常(使用PyCharm直接右鍵run)

2. 展示靜態(tài)文件讀取問題

在根目錄(或其他任意除demo.py文件路徑)執(zhí)行上面的demo.py文件就會報錯

$ 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'

明顯看出

  • 直接使用相對路徑讀取靜態(tài)文件的方式報錯
  • 使用os.path.dirname(\_\_file\_\_)獲取當(dāng)前python文件路徑并拼接的方式不會報錯

3. 解決方案

使用os.path.dirname(\_\_file\_\_)的方式去獲取當(dāng)前python文件路徑,再去拼接靜態(tài)文件的路徑

demo中將get_txt()方法刪除,繼續(xù)進行以下打包demo

4. 展示靜態(tài)文件打包問題

打包,創(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

打開打包信息文件,內(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并不在資源文件中,可以實際試一下,其他項目引用這個文件執(zhí)行獲取文件也將報錯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)識
)

增加配置文件

/MANIFEST.in

include demo/demo.txt

最終文件目錄

test-setup

demo

\_\_init\_\_.pydemo.pydemo.txtsetup.pyMANIFEST.in

再次執(zhí)行打包命令

$ python setup.py sdist

打開打包信息文件,內(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

可以看到demo.txt已經(jīng)在打包信息當(dāng)中,引用這個包也不會報錯了

參考資料:

Creating a Source Distribution

Flask docs - Make the Project Installable

到此這篇關(guān)于Python打包時包含靜態(tài)文件處理方法的文章就介紹到這了,更多相關(guān)Python打包靜態(tài)文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python中使用SAX解析xml實例

    Python中使用SAX解析xml實例

    這篇文章主要介紹了Python中使用SAX解析xml實例,利用SAX解析XML文檔牽涉到兩個部分:解析器和事件處理器,需要的朋友可以參考下
    2014-11-11
  • python遍歷路徑破解表單的示例

    python遍歷路徑破解表單的示例

    這篇文章主要介紹了python遍歷路徑破解表單的示例,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-11-11
  • Pandas技巧分享之創(chuàng)建測試數(shù)據(jù)

    Pandas技巧分享之創(chuàng)建測試數(shù)據(jù)

    學(xué)習(xí)pandas的過程中,為了嘗試pandas提供的各類功能強大的函數(shù),常常需要花費很多時間去創(chuàng)造測試數(shù)據(jù),本篇介紹了一些快速創(chuàng)建測試數(shù)據(jù)的方法,需要的可以參考一下
    2023-07-07
  • 使用Django清空數(shù)據(jù)庫并重新生成

    使用Django清空數(shù)據(jù)庫并重新生成

    這篇文章主要介紹了使用Django清空數(shù)據(jù)庫并重新生成,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • 使用Python自動化Microsoft Excel和Word的操作方法

    使用Python自動化Microsoft Excel和Word的操作方法

    這篇文章主要介紹了使用Python自動化Microsoft Excel和Word,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04
  • Python使用turtle庫繪制科赫雪花詳細(xì)代碼

    Python使用turtle庫繪制科赫雪花詳細(xì)代碼

    科赫曲線是一種分形,其形態(tài)非常像雪花,因此又被稱作科赫雪花、雪花曲線,這篇文章主要給大家介紹了關(guān)于Python使用turtle庫繪制科赫雪花的相關(guān)資料,需要的朋友可以參考下
    2024-05-05
  • opencv3/C++圖像像素操作詳解

    opencv3/C++圖像像素操作詳解

    今天小編就為大家分享一篇opencv3/C++圖像像素操作詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • python實現(xiàn)csdn全部博文下載并轉(zhuǎn)PDF

    python實現(xiàn)csdn全部博文下載并轉(zhuǎn)PDF

    我們學(xué)習(xí)編程,在學(xué)習(xí)的時候,會有想把有用的知識點保存下來,我們可以把知識點的內(nèi)容爬下來轉(zhuǎn)變成pdf格式,方便我們拿手機可以閑時翻看,是很方便的,本文就介紹一下如何實現(xiàn)
    2021-06-06
  • Python使用pandas對數(shù)據(jù)進行差分運算的方法

    Python使用pandas對數(shù)據(jù)進行差分運算的方法

    今天小編就為大家分享一篇Python使用pandas對數(shù)據(jù)進行差分運算的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • 一文帶你探尋Python中的裝飾器

    一文帶你探尋Python中的裝飾器

    這篇文章就來和大家詳細(xì)講一講Python中裝飾器的相關(guān)知識,文中的示例代碼講解詳細(xì),對我們深入了解Python有一定的幫助,感興趣的可以了解一下
    2023-04-04

最新評論

宕昌县| 邮箱| 布尔津县| 清徐县| 遂平县| 武宣县| 来宾市| 黄山市| 南通市| 子洲县| 武安市| 集安市| 甘南县| 金堂县| 南岸区| 阿鲁科尔沁旗| 军事| 舒城县| 和龙市| 呼和浩特市| 古蔺县| 确山县| 济源市| 建昌县| 平邑县| 深圳市| 固安县| 太保市| 湖北省| 徐闻县| 延津县| 冷水江市| 常宁市| 华坪县| 乐陵市| 红桥区| 弥渡县| 万全县| 高唐县| 灌南县| 台州市|