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 不安装数据文件?
我的包结构将所有文件 ( hello.py, MANIFEST.IN, setup.py) 放在一个名为 的根文件夹中fakeapp。我想保留这个结构,因为我实际尝试修复的项目具有这个结构。
我查了很多答案并尝试过:
\n\n__init__.py到存储库的根目录中,但这并不能解决问题。include_package_files=True但无济于事package_data={\'\':[\'texto.txt\']}和include texto.txt但MANIFEST.in无济于事。我确信这是一个重复的问题,但我无法找到任何可行的解决方案。
\n\n这是我的测试用例:\nsetup.py
\n\nfrom 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)\nRun 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()\nRun Code Online (Sandbox Code Playgroud)\n\n清单中:
\n\ninclude texto.txt\nRun Code Online (Sandbox Code Playgroud)\n\n我在 dist/ 中创建了一个 tar.gz
\n\npython setup.py sdist\nRun Code Online (Sandbox Code Playgroud)\n\n我的 texto.txt 就在那个 tarball 中。
\n\n然后我安装了
\n\npip install dist\\hi-2018.12.2.tar.gz\nRun Code Online (Sandbox Code Playgroud)\n\n并且只有hello.py进入C:\\Python2.7\\Scripts
我究竟做错了什么?
\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\nRun Code Online (Sandbox Code Playgroud)\n
texto.txt实际上不是包数据,因为它不在包内(带有 的目录__init__.py),因此不会安装。获得所需内容的最简单方法是重组代码,以便它安装一个包hello而不是一个平面模块hello.py,并hello.py移动到hello/__init__.py和texto.txt移动到hello/texto.txt。