setup.py 没有安装我的 package_data

Tan*_*man 4 python pip setup.py

在 Ubuntu 16.04 和 Windows 7(pip 18.1、python 2.7.15)上,我遇到了一个问题,我的文件package data 进入了 tar.gz 文件,但当我安装时它们没有安装到我的脚本目录中点。我在 Windows 上的脚本目录是\\Python27\\Scripts. 我也签入了site-packages,但该文件没有显示在那里。我希望在通过 pip 安装时有一个文本文件与 python 脚本一起出现,并且我认为使用data_files无法实现此目的(根据 \n setup.py 不安装数据文件

\n\n

我的包结构将所有文件 ( hello.py, MANIFEST.IN, setup.py) 放在一个名为 的根文件夹中fakeapp。我想保留这个结构,因为我实际尝试修复的项目具有这个结构。

\n\n

我查了很多答案并尝试过:

\n\n
    \n
  • 将空添加__init__.py到存储库的根目录中,但这并不能解决问题。
  • \n
  • 我尝试过添加和删除include_package_files=True但无济于事
  • \n
  • 我已尝试指定package_data={\'\':[\'texto.txt\']}
    添加include texto.txtMANIFEST.in无济于事。
  • \n
  • 这个答案:建议使用 bdist,但这也不起作用。
  • \n
\n\n

我确信这是一个重复的问题,但我无法找到任何可行的解决方案。

\n\n

这是我的测试用例:\nsetup.py

\n\n
from setuptools import setup\nsetup(\n    author=\'hi\',\n    author_email=\'hi@hi.com\',\n    description="test",\n    scripts=[\'hello.py\',],\n    license=\'MIT\',\n    name=\'hi\',\n    version=\'v2018.12.02\',\n    include_package_data=True\n)\n
Run Code Online (Sandbox Code Playgroud)\n\n

你好.py:

\n\n
#!/usr/bin/env python\n\ndef main():\n    print(\'hello world!\')\n\nif __name__ == \'__main__\':\n    main()\n
Run Code Online (Sandbox Code Playgroud)\n\n

清单中:

\n\n
include texto.txt\n
Run Code Online (Sandbox Code Playgroud)\n\n

我在 dist/ 中创建了一个 tar.gz

\n\n
python setup.py sdist\n
Run Code Online (Sandbox Code Playgroud)\n\n

我的 texto.txt 就在那个 tarball 中。

\n\n

然后我安装了

\n\n
pip install dist\\hi-2018.12.2.tar.gz\n
Run Code Online (Sandbox Code Playgroud)\n\n

并且只有hello.py进入C:\\Python2.7\\Scripts

\n\n

我究竟做错了什么?

\n\n

目录树:

\n\n
\xe2\x94\x82   hello.py\n\xe2\x94\x82   MANIFEST.in\n\xe2\x94\x82   setup.py\n\xe2\x94\x82   texto.txt\n\xe2\x94\x82\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80dist\n\xe2\x94\x82       hi-2018.12.2.tar.gz\n\xe2\x94\x82\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80hi.egg-info\n        dependency_links.txt\n        PKG-INFO\n        SOURCES.txt\n        top_level.txt\n
Run Code Online (Sandbox Code Playgroud)\n

jwo*_*der 5

texto.txt实际上不是包数据,因为它不在包内(带有 的目录__init__.py),因此不会安装。获得所需内容的最简单方法是重组代码,以便它安装一个包hello而不是一个平面模块hello.py,并hello.py移动到hello/__init__.pytexto.txt移动到hello/texto.txt