【问题标题】:How do I include non-.py files in PyPI?如何在 PyPI 中包含非 .py 文件?
【发布时间】:2014-04-23 18:24:47
【问题描述】:

我是 PyPI 的新手......所以让我有资格说。我正在尝试在 PyPI 上放置一个包,但是当我尝试使用 pip 安装它时遇到了一些麻烦。当我将文件上传到 PyPI 时,我收到一条警告(但 setup.py 脚本完成时出现非致命错误和 200 状态):

'my_package/static/my_folder' not a regular file -- skipping

然后当我在 pip 中安装它时,我得到一个错误:

"error: can't copy 'my_package/static/my_folder': doesn't exist or not a regular file. 

从关于 SO 的其他答案中,我尝试更改我的 MANIFEST.in 和 setup.py 文件,但没有成功。这是我当前的 MANIFEST.in:

recursive-include my_package *.css *.js *.jinja2

和 setup.py:

try:
    from setuptools import setup, find_packages
except ImportError:
    from distutils.core import setup, find_packages

setup(
    name='my_package',
    packages=find_packages(),
    include_package_data=True,
    platforms='any',
    version='1.0',
    description='my_description',
    license='MIT',
    author='Me',
    author_email='me@example.com',
    install_requires=[
        'Flask',
        'Jinja2',
        'requests',
    ],
    url='http://www.example.com',
    download_url='https://github.com/me/my_package/tarball/1.0',
    classifiers=[
        'License :: OSI Approved :: MIT License',
    ],
)

编辑:我也尝试省略 MANIFEST.in 文件只是为了看看这是否搞砸了,但我得到了相同的结果。

【问题讨论】:

  • 刚刚构建了一个包含两个文件(my_package/__init__.pymy_package/static/a.css)的简单项目,您的 setup.pyMANIFEST.in 工作正常。您的清单中有其他规则吗?如果您能提供一个重现问题的最小项目,那就太好了。
  • @uranusjr:那行得通。然后我删除了 PyPI 上的整个包并重新提交,没有任何问题。一定是 PyPI 的结果。由于您有效地解决了问题,请发表您的评论作为答案,我会接受。谢谢!

标签: python pip manifest setup.py pypi


【解决方案1】:

(根据请求的评论重新发布。)

您的设置脚本和MANIFEST.in 应该可以工作。用一个最小的例子来证明这一点:

my_project/
    my_package/
        static/
            a.css
        __init__.py
    MANIFEST.in
    setup.py

运行python setup.py sdist,您会发现static/a.css__init__.py 都捆绑在tar.gz 包中。

【讨论】:

  • 我不清楚你要什么。答案已经包含__init__.py,您不需要对清单做任何事情,因为setuptools 会自动包含packages 中指定的目录中包含的所有__init__.py
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-09-06
  • 2019-08-16
  • 2014-04-21
  • 2017-05-28
  • 2020-02-19
  • 2019-01-24
  • 2021-09-13
相关资源
最近更新 更多