簡體   English   中英

如何將 package 之外的文件附加到我的 Python package

[英]How can I attach a file outside the package to my Python package

我有一個顯示項目的 ABOUT.md 文件的 web 應用程序。 該項目具有以下文件樹:

project_folder/
  main_package/
    assets/icon.png
    __init__.py
    app.py
  .gitignore # And other files
  README.md
  ABOUT.md
  setup.cfg
  setup.py

在 app.py 中,我有一個網絡服務器,它呈現並提供文件README.md的內容。 它有這樣的代碼:

from main_package import __file__ as mpfile

# First parent is just the folder where __init__.py is located.
ABOUT_MD = Path(mpfile).parent.parent / 'ABOUT.md'

這無需構建即可工作,但是如果我構建輪子並將其安裝在其他環境中,它將停止工作。

我修改了setup.cfg中的配置,因此它包含 ABOUT.md

[options.package_data]
main_package = 
  ../ABOUT.md
  assets/*

但這會將文件復制到site_packages的根目錄,我認為這有點臟。

我想在根文件夾中保留ABOUT.md文件,因此它仍然可以通過 GitHub 訪問,但我也希望能夠構建和發布我的 package。

主意:

修改構建系統以在創建輪子時將 ABOUT.md 從根目錄復制到main_package/assets/ABOUT.md 然后,在app.py中添加一個 if 來根據文件的位置加載正確的文件。 問題是我不知道如何讓構建系統將文件復制到這個路徑。

2022-07-18 更新:為什么不鏈接?

回應@Leander

如果我們使用硬鏈接,則該信息不會通過版本控制系統 (git) 傳播,因此在每台其他計算機上它似乎是兩個不同的文件,我們將不得不以某種方式同步數據(使用鈎子或任何類型系統),加上它會占用雙倍的磁盤空間。

如果我們使用符號鏈接,使用的空間會減少,但是存儲庫的 web 視圖不能跟隨符號鏈接,因此 ABOUT.md 結束不可用(它只顯示符號鏈接的明文路徑)。

符號鏈接

以相反的方式進行符號鏈接(原始在./ABOUT.md中並在main_package/assets/ABOUT.md創建符號鏈接到../../ABOUT.md完美無缺。

  • 確實,GitHub(例如)不遵循符號鏈接,但根文件夾中的 ABOUT.md 仍然可讀。
  • Wheel 打包復制文件,而不是符號鏈接,因此可以在任何計算機上打包和安裝應用程序。
  • 導入文件時無需添加 If 或 try/catch,只需main_package/assets/ABOUT.md

您的問題與存儲庫的版本控制問題非常相似。 通常,該版本由 git 存儲庫作為標記提供,並且可能從提交 hash 和未提交的臟標志中獲取后綴。 https://github.com/jbweston/miniver為這個問題提供了一個非常輕量級的解決方案,所以我建議你遵循這個想法。 它基本上檢查文件中的版本字符串,如果找到占位符,則使用 git 組成版本字符串,否則使用給定值。 此值僅在構建過程中設置,這意味着它在執行setup.py時被覆蓋,因此僅出現在已安裝的軟件實例中。

在您的情況下,只需在構建過程中將版本替換為ABOUT.md內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM