如何从django应用程序创建一个轮子?

the*_*orn 12 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.prefixsite-packages跨系统不一致).

我是否正确假设myapp/templates/myapp/foo.html应该最终进入.../site-packages/myapp/templates/myapp/foo.html并且类似于静态文件,并且用户需要运行manage.py collectstatic之后pip install myapp

更新(示例):

以下结构:

(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
Run Code Online (Sandbox Code Playgroud)

setup.py

import setuptools
from distutils.core import setup
setup(
    name='myapp',
    version='0.1.0',
    packages=['myapp']
)
Run Code Online (Sandbox Code Playgroud)

MANIFEST.in

recursive-include myapp/templates *
recursive-include myapp/static *
Run Code Online (Sandbox Code Playgroud)

运行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
Run Code Online (Sandbox Code Playgroud)

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

更新2(解决方案):

将MANIFEST.in文件更改为

recursive-include myapp *
Run Code Online (Sandbox Code Playgroud)

和setup.py到

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

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

the*_*orn 1

MANIFEST.in文件需要更改为:

recursive-include myapp *
Run Code Online (Sandbox Code Playgroud)

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

如果您打算在安装文件后运行,上面的声明还包括myapp/myapp/static可能有用的声明。manage.py collectstatic.whl

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

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

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