使用 setup.py 和 Python 创建(或不创建)文件夹的巧妙方法?

A clever way to create (or not create them) folders with setup.py and Python?

我正在构建一个小型命令行软件(假设它叫做 Stanley)并用 setuptools 打包它。基本上我的项目看起来像这样:

Stanley / __init__.py
        / foo.py
        / bar.py
        / datafiles / preference_file_1.metadata
                    / ...
                    / preference_file_n.metadata         
LICENSE
MANIFEST.in
README.md
setup.cfg
setup.py

Stanley 需要在数据文件文件夹中创建一些首选项文件,但无法导入现有的首选项文件(例如,使用 setuptools.setup() 中的 data_files 参数)因为它们将包含用户在安装后提供的信息。此外,我无法提前创建空文件,因为我无法提前知道将创建多少这些文件。

我需要在安装 Stanley 时创建一次此文件夹。 Stanley 在此文件夹中创建的任何文件在每次更新时都必须保持完整。也就是说,当用户 运行 $ pip3 install stanley --upgrade 时,文件夹数据文件中包含的所有首选项都将被保留。所以我的问题是:

1) 如何使用设置工具创建目录数据文件? 2) 如何确保我的软件在数据文件中创建的文件不会被更改,并且在重新安装或更新后仍然可以在数据文件中访问?

请注意,这是我第一次编写 "real" 软件,包括编码、测试、打包、分发(尽管 PyPi 和 Python 为我做了很多工作)等. 因此我不知道很多好的做法,如果你告诉我我目前管理用户偏好的方式不正确,我很乐意改变它以适应更高的标准。另外如果我的问题不清楚,我在这里让你明白。

非常感谢。

我不完全清楚你对这些数据文件的用例是什么,但它们似乎是用户偏好文件,在这种情况下,正确的做法是将它们存储在用户的主目录中,远离从你的包的代码。使用 appdirs 确定您的应用程序应将文件存储在的正确路径。

  1. How to create the directory datafiles using the setuptools?

不要使用设置工具创建它们;编写您的程序包,以便在需要文件时在适当的位置创建文件。

  1. How to make sure that the files created by my software in datafiles will not be changed and will still be accessible in datafiles after a re-installation or an update?

该文件存储在您的包代码之外,因此它们不受卸载或更新的影响。