91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

利用Python怎么打包含靜態文件

發布時間:2021-01-15 14:26:58 來源:億速云 閱讀:188 作者:Leah 欄目:開發技術

利用Python怎么打包含靜態文件?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

使用場景

  1. 已搭建了PyPI私有庫,上傳公共庫包含靜態文件,如需要使用sql靜態文件初始化數據庫。

  2. 打包python包,給其他人使用,但項目中包含靜態文件,如html。

解決步驟

  1. 解決靜態文件讀取問題

  2. 解決靜態文件打包問題

環境

Python3.8

PyCharm 2020

demo項目為例

  • 創建項目

  • 展示靜態文件讀取問題

  • 解決方案

  • 展示靜態文件打包問題

  • 解決方案

1. 創建項目

創建一個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__":
  """類內測試,均無異常"""
  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.

在當前路徑下執行demo.py文件沒有異常(使用PyCharm直接右鍵run)

2. 展示靜態文件讀取問題

在根目錄(或其他任意除demo.py文件路徑)執行上面的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'

明顯看出

  • 直接使用相對路徑讀取靜態文件的方式報錯

  • 使用os.path.dirname(\_\_file\_\_)獲取當前python文件路徑并拼接的方式不會報錯

3. 解決方案

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

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

4. 展示靜態文件打包問題

打包,創建打包配置文件

/setup.py

from setuptools import find_packages, setup

setup(
  name='demo',
  version='1.0.0',
  packages=find_packages(),
  zip_sage=False,
)

執行打包命令

$ python setup.py sdist

打開打包信息文件,內容如下

/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并不在資源文件中,可以實際試一下,其他項目引用這個文件執行獲取文件也將報錯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, # 打包包含靜態文件標識
)

增加配置文件

/MANIFEST.in

include demo/demo.txt

最終文件目錄

test-setup

demo

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

再次執行打包命令

$ python setup.py sdist

打開打包信息文件,內容如下

/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

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

宜丰县| 纳雍县| 巴中市| 百色市| 读书| 洛隆县| 海淀区| 崇文区| 定兴县| 三河市| 水富县| 永州市| 鄂尔多斯市| 巴里| 达尔| 惠东县| 嘉荫县| 洛隆县| 浮山县| 陆丰市| 台南市| 舒兰市| 梧州市| 武威市| 涿州市| 武夷山市| 钦州市| 策勒县| 门源| 浦江县| 松滋市| 神农架林区| 隆德县| 紫阳县| 年辖:市辖区| 东阿县| 余江县| 南昌市| 乌兰浩特市| 贺州市| 达拉特旗|