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 具有更多功能。
我正在尝试通过 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 具有更多功能。