python - 如何从 Django 应用程序创建一个轮子?

标签 python django setuptools

可重用应用程序文档 ( https://docs.djangoproject.com/en/1.9/intro/reusable-apps/ ) 告诉您在 MANIFEST.in 中列出模板和静态文件,但它看起来不像 python setup.py bdist_wheel 查看该文件。

我看到了对 data_files 的引用,但这些文件位于与 python 安装(sys.prefix)相关的目录中,而不是包安装(和 sys.prefix 与跨系统的 site-packages 没有统一的关系。

我假设 myapp/templates/myapp/foo.html 应该在 .../site-packages/myapp/templates/myapp/foo.html 和类似的静态文件,并且用户需要在 pip install myapp 之后运行 manage.py collectstatic

更新(示例):

以下结构:

(build2) go|c:\srv\tmp\myapp> tree
.
|-- MANIFEST.in
|-- myapp
|   |-- static
|   |   `-- myapp
|   |       `-- foo.css
|   |-- templates
|   |   `-- myapp
|   |       `-- foo.html
|   |-- urls.py
|   `-- views.py
`-- setup.py

5 directories, 6 files

设置.py

import setuptools
from distutils.core import setup
setup(
    name='myapp',
    version='0.1.0',
    packages=['myapp']
)

MANIFEST.in

recursive-include myapp/templates *
recursive-include myapp/static *

运行 python setup.py sdistpython setup.py bdist_wheel 创建以下文件 bin myapp/dist:

2016-06-18  13:47             2,073 myapp-0.1.0-py2-none-any.whl
2016-06-18  13:46             2,493 myapp-0.1.0.zip

如果您查看 .zip 文件,您将找到模板和静态文件夹,如果您将 .whl 文件重命名为 .zip 并查看其中,则不包括目录。

更新 2(解决方案):

将 MANIFEST.in 文件更改为

recursive-include myapp *

和 setup.py 到

from setuptools import find_packages, setup
setup(
    name='myapp',
    version='0.1.0',
    include_package_data=True,
    packages=['myapp'],
    zip_safe=False,
)

然后运行 ​​python setup.py bdist_wheel 将创建一个 .whl 文件来安装 myapp/templatesmyapp/static 在预期的地方。

最佳答案

MANIFEST.in 文件需要更改为:

recursive-include myapp *

这包括 myapp/myapp 下具有正确路径的所有内容。特别是,这包括 myapp/myapp/templates,这是必需的。

上面的声明还包括 myapp/myapp/static 如果您计划在安装 .whlmanage.py collectstatic 这可能会很有用 文件。

setup.py 中,setup 函数需要从 setuptools(而不是 distutils)导入,即:

from setuptools import find_packages, setup
setup(
    name='myapp',
    version='0.1.0',
    include_package_data=True,
    packages=['myapp'],
    zip_safe=False,
)

当您现在运行 python setup.py bdist_wheel 时,它将创建一个 .whl 文件来安装 myapp/templatesmyapp/static 在预期的位置。

关于python - 如何从 Django 应用程序创建一个轮子?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37896434/

相关文章:

python - 如何模拟 Django 模型查询

python - Django 第一次迁移有一个匿名用户

python - 如何撤消 Python setuptools --prefix 路径错误

python - Scrapy 遗漏了一些 html 元素

python - 如何使用 super 命令python

python - 无法在 Cloud Run 应用中读取 pickle 文件。类型错误 : __cinit__() takes at least 2 positional arguments

python - Django:基于类的 View 中的 Django_filters

python - 如何为 setuptools 分发创建嵌套的命名空间包

virtualenv - 为什么我 pip freeze 没有出现 setuptools 1.3.1?

python - 如何在列表理解中使用 if 条件?