python django webapp 打包 sdist

python django webapp packaging sdist

当我运行python setup.py sdist 在我的项目目录中并使用 tar --list -f .\dist\my_project_name-1.0.tar.gz 检查内容 我希望看到一个重要的 python 文件 (manage.py) 和几个目录,例如 templates 其中包含 .html 文件,以及 static 包含 .css 文件。但是,tar 存档中都缺少这些文件。

我看了很多问题: Q3 Q4

但添加 MANIFEST.in 或将以下行添加到我的 setup.py 没有改变任何东西。那我的 manage.py 呢? python 文件不应该默认包含在 sdist 中吗?

include_package_data=True,
data_files=[('templates','my_app/templates/my_app/*.html']),
            ('static', ['my_app/static/my_app/static/css/*.css'])]

此外,我用 python setup.py sdist bdist_wheel 得到了完全相同的结果(尽管我不确定这两个命令有什么区别)。

what about my manage.py? Shouldn't python files be included by default with sdist?

不,默认情况下不会包含所有 python 文件。 setup.py 的另一个重要部分是 packagespy_modules 关键字。您必须指定 所有 个包 个您要包含的子包和模块。

一般来说,Django 应用程序不随 manage.py 文件一起分发,但如果你想包含它,你可以将 py_modules=['manage'] 添加到设置关键字中(假设 manage.pysetup.py).

旁边

要让您构建的发行版包含数据文件,例如您的模板和静态文件,您的 MANIFEST.in 需要包含它们。您应该添加如下条目:

recursive-include my_app/templates *
recursive-include my_app/static *

不需要data_files关键字。只需使用 include_package_data=True 它就会尊重你的 MANIFEST.in.

Also, I get the same exact result with python setup.py sdist bdist_wheel

sdist(源代码分发)和bdist_wheel(wheel 二进制分发)只是不同的分发格式。

因此,与第一个命令相比,您只是告诉它构建源代码分发和一个轮子。添加 bdist_wheel 不会修改源分发的构建方式。