【问题标题】:How do I create a wheel from a django app?如何从 django 应用程序创建轮子?
【发布时间】:2016-10-20 04:03:41
【问题描述】:

可重复使用的应用程序文档 (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

setup.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

【问题讨论】:

  • 你能展示你的问题的 MCSE 吗?您在MANIFEST.insetup.py 中尝试过什么?
  • @thebjorn,对赏金感到遗憾,但您可能应该回答自己的问题!

标签: python django setuptools


【解决方案1】:

MANIFEST.in文件需要改成:

recursive-include myapp *

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

上面的声明还包括myapp/myapp/static,如果您打算在安装.whl 文件后运行manage.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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-11
    • 1970-01-01
    • 2017-09-28
    • 2012-04-13
    • 2013-06-19
    • 2011-12-27
    相关资源
    最近更新 更多