python - pip3 没有安装我的数据文件,尽管我的 setup.py 有 include_package_data
问题描述
除了我的 Python 脚本,我希望我的包包含一些配置文件( *.conf
)。因此,在 中setup.py
,我设置了选项include_package_data=True
并创建了一个文件MANIFEST.in
,其中列出了我想要包含的数据文件。
源码包的创建是没问题的,我的 tar.gz 包含配置文件:
drwxrwxr-x axelle/axelle 0 2020-02-28 15:01 droidlysis-3.0.13/
-rw-r--r-- axelle/axelle 3551 2020-01-14 14:19 droidlysis-3.0.13/droidconfig.py
-rw-rw-r-- axelle/axelle 38 2020-02-28 15:01 droidlysis-3.0.13/setup.cfg
-rw-rw-r-- axelle/axelle 1123 2020-02-28 15:01 droidlysis-3.0.13/setup.py
-rw-r--r-- axelle/axelle 4902 2020-01-13 10:10 droidlysis-3.0.13/droidziprar.py
drwxrwxr-x axelle/axelle 0 2020-02-28 15:01 droidlysis-3.0.13/conf/
-rw-r--r-- axelle/axelle 1872 2019-06-03 09:43 droidlysis-3.0.13/conf/manifest.conf
-rw-r--r-- axelle/axelle 10127 2020-01-20 09:38 droidlysis-3.0.13/conf/kit.conf
...
但是,当我上传包以测试 pypi 并测试安装(在 Python 虚拟环境中)时,配置文件不存在!
~/softs/myvirtualenvs/testdroidlysis $ pip3 install --no-cache-dir --extra-index-url https://test.pypi.org/simple/ droidlysis
Collecting droidlysis
Downloading https://test-files.pythonhosted.org/packages/4c/3a/c559b3552af14337b1b3687a2be984401f9e503441f8a72a383c05470b7d/droidlysis-3.0.13.tar.gz (40kB)
100% |████████████████████████████████| 40kB 505kB/s
Requirement already satisfied: SQLAlchemy in ./lib/python3.6/site-packages (from droidlysis)
Requirement already satisfied: configparser in ./lib/python3.6/site-packages (from droidlysis)
Requirement already satisfied: python-magic in ./lib/python3.6/site-packages (from droidlysis)
Requirement already satisfied: rarfile in ./lib/python3.6/site-packages (from droidlysis)
Installing collected packages: droidlysis
Running setup.py install for droidlysis ... done
Successfully installed droidlysis-3.0.13
~/softs/myvirtualenvs/testdroidlysis $ find . -name "*.conf" -print
~/softs/myvirtualenvs/testdroidlysis $
仅供参考,我的MANIFEST.in
:
include conf/*.conf
更新:这是setup.py
#!/usr/bin/env python3
from setuptools import setup
with open("README.md", "r") as fh:
long_description = fh.read()
setup(
name = 'droidlysis',
description='DroidLysis: pre-analysis script for suspicious Android samples',
long_description=long_description,
long_description_content_type="text/markdown",
author='me',
author_email='me@gmail.com',
url='https://github.com/me',
license='MIT',
keywords="android malware reverse",
python_requires='>=3.0.*',
version = '3.0.13',
classifiers=[
"Programming Language :: Python :: 3",
"License :: OSI Approved :: MIT License",
"Development Status :: 3 - Alpha",
"Operating System :: Unix",
"Topic :: Software Development :: Disassemblers",
],
include_package_data=True,
install_requires=[ 'configparser', 'python-magic', 'SQLAlchemy', 'rarfile' ],
scripts = [ 'droidlysis3.py', 'droidconfig.py', 'droidcountry.py', 'droidproperties.py', 'droid
report.py', 'droidsample.py', 'droidsql.py', 'droidurl.py', 'droidutil.py', 'droidziprar.py' ],
)
解决方案
我看到您的发行版存在这些问题,并且setup.py
:
它既不列出 Python 模块也不列出要安装的包,它只列出脚本。安装的数据
MANIFEST.in
只能安装到一个包(其中包含__init__.py
的可导入目录)。include_package_data
不适用于源代码分发,它仅适用于轮子。MANIFEST.in
是给 sdists 的。您忘记包含
setup.py
在 git 存储库中。
推荐阅读
- flutter - 例外:无法构建插件analog_clock
- google-cloud-platform - Google Cloud Healthcare API 不支持 PlanDefintion/$apply 和 Activity Definition/$apply
- c# - c#如何在win10中通过右键将选定的文本添加到我的程序中
- javascript - 试图从 Mongo 读取数据
- javascript - date-fns:如何在应用程序范围内定义默认语言环境?
- c - SSL_free 函数崩溃
- python - 与 Chrome 浏览器类似,如何使用 Python 从 PDF 中提取文本?
- android - 无法使用 Flutter 和 Firebase 设置 Facebook 身份验证
- java - 为什么我们需要在 Spring 中使用 FreeMarker?
- wordpress - 我的网站 xml 提要仅显示单页