sdist 正确但 pip 安装没有静态

sdist correct but pip install no static

我正在尝试通过 pip(存储在 Pypi 上)交付 Django 应用程序。 问题是当我用 pip 安装应用程序时,它不包含主要指定包内的静态文件夹。

这是我的资料:

├── LICENSE.txt
├── MANIFEST.in
├── README.rst
├── setup.cfg
├── setup.py
└── zxcvbn_password
    ├── fields.py
    ├── __init__.py
    ├── static
    │   └── zxcvbn_password
    │       └── js
    │           ├── password_strength.js
    │           ├── zxcvbn-async.js
    │           └── zxcvbn.js
    ├── validators.py
    └── widgets.py

我的做法是:

python setup.py register -r pypi
python setup.py sdist upload -r pypi

tar 存档已正确创建(它包含静态文件夹),当我从 PyPi 下载相同的存档时,它也包含静态文件夹。但是用 pip 安装它只会在我的站点包中的 zxcvbn_password 中提供以下内容:

└── zxcvbn_password
    ├── fields.py
    ├── __init__.py
    ├── validators.py
    └── widgets.py

我是这样写的 setup.py:

from distutils.core import setup

setup(
    name='django-zxcvbn-password',
    packages=['zxcvbn_password'],
    include_package_data=True,
    url='https://github.com/Pawamoy/django-zxcvbn-password',
    # and other data ...
)

还有我的MANIFEST.in:

include LICENSE.txt
include README.rst
recursive-include zxcvbn_password/static *

我是不是做错了什么? 为什么pip使用setup.py install时没有安装static文件夹?

编辑

我添加了 setup.py 从 distutils 导入设置函数的行。
我在 运行 python setup.py sdist upload -r pypitest:
时收到此警告 /usr/lib/python2.7/distutils/dist.py:267: UserWarning: Unknown distribution option: 'include_package_data'

使用 Distutils 的解决方案

# MANIFEST.in

include LICENSE.txt
include README.rst
# recursive-include zxcvbn_password/static *

# setup.py

from distutils.core import setup

setup(
    name='django-zxcvbn-password',
    packages=['zxcvbn_password'],
    package_data={'': ['static/zxcvbn_password/js/*.js']},
    # include_package_data=True,
    url='https://github.com/Pawamoy/django-zxcvbn-password',
    # and other data ...
)

我注释掉了 MANIFEST.in 中的递归包含行和 setup.py 中的 include_package_data=True:显然,如果您指定 package_data=,则不需要它们setup.py.

中的 {...} 行

使用设置工具的解决方案

# MANIFEST.in

include LICENSE.txt
include README.rst
recursive-include zxcvbn_password/static *

# setup.py

from setuptools import setup

setup(
    name='django-zxcvbn-password',
    packages=['zxcvbn_password'],
    include_package_data=True,
    url='https://github.com/Pawamoy/django-zxcvbn-password',
    # and other data ...
)

唯一更改的行是 from setuptools import setup

结论

我的问题确实来自我导入设置函数的方式。 阅读此文:Differences between distribute, distutils, setuptools and distutils2?,我了解到 Setuptools 比 Distutils 具有更多功能。