![](/img/trans.png)
[英]Python: How can I override one module in a package with a modified version that lives outside the 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 來根據文件的位置加載正確的文件。 問題是我不知道如何讓構建系統將文件復制到這個路徑。
回應@Leander
如果我們使用硬鏈接,則該信息不會通過版本控制系統 (git) 傳播,因此在每台其他計算機上它似乎是兩個不同的文件,我們將不得不以某種方式同步數據(使用鈎子或任何類型系統),加上它會占用雙倍的磁盤空間。
如果我們使用符號鏈接,使用的空間會減少,但是存儲庫的 web 視圖不能跟隨符號鏈接,因此 ABOUT.md 結束不可用(它只顯示符號鏈接的明文路徑)。
以相反的方式進行符號鏈接(原始在./ABOUT.md
中並在main_package/assets/ABOUT.md
創建符號鏈接到../../ABOUT.md
完美無缺。
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.