![](/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.