Python包装:数据文件正确放在tar.gz文件中,但未安装到虚拟环境中

我无法正确安装项目package_fiddler到我的虚拟环境。

我想通了MANIFEST.in负责把非cookies文件放在Package_fiddler-0.0.0.tar.gz中,这是在执行python setup.py sdist时生成的。

然后我做了:

(virt_envir)$ pip install dist / Package_fiddler-0.0.0.tar.gz

但这没有安装数据文件或包到/home/username/.virtualenvs/virt_envir/local/lib/python2.7/site-packages。

我尝试了许多配置的设置参数package_data,include_package_data和data_files,但我似乎每次使用错误的配置。

哪个配置package_data和/或include_package_data和/或data_files将正确安装package_fiddler到我的虚拟环境?

项目树

.
├── MANIFEST.in
├── package_fiddler
│   ├── data
│   │   ├── example.html
│   │   └── stylesheets
│   │       └── example.css
│   └── __init__.py
├── README.rst
└── setup.py

setup.py

from setuptools import setup


setup(
    name='Package_fiddler',
    entry_points={
    'console_scripts': ['package_fiddler = package_fiddler:main', ],},
    long_description=open('README.rst').read(),
    packages=['package_fiddler',])

MANIFEST.in

include README.rst
recursive-include package_fiddler/data *

我尝试过哪些setup.py(上面的代码基础)的配置?

配置1

添加:

package_data={"": ['package_fiddler/data/*',]}

配置2

添加:

package_data={"": ['*.html', '*.css', '*.rst']}

配置3

添加:

include_package_data=True

配置4

添加:

package_data={"": ['package_fiddler/data',]}

删除:

packages=['package_fiddler',]

配置5(Chris的建议)

添加:

package_data={"data": ['package_fiddler/data',]}

删除:

packages=['package_fiddler',]

配置6

添加:

package_data={"": ['package_fiddler/data/*',]}

删除:

packages=['package_fiddler',]

这些配置都会导致/home/username/.virtualenvs/virt_envir/local/lib/python2.7/site-packages上没有安装任何文件。

编辑

Toshio Kuratomi的照片:
在我的原始帖子中,我使用最简单的树结构,其中出现此问题的清晰度,但在现实中,我的树看起来更像下面的树。对于那棵树,奇怪的是,如果我只在样式表中放置一个__init__.py在文本文件夹中的所有数据文件也正确安装!这让我很生气。

树2(这会正确安装所有数据文件!!)

.
├── MANIFEST.in
├── package_fiddler
│   │── stylesheets
|   |     ├── __init__.py
|   |     ├── example.css  
|   |     └── other
|   |          └── example2.css
|   |__ texts
|   |     ├── example.txt  
|   |     └── other
|   |          └── example2.txt
│   └── __init__.py
├── README.rst
└── setup.py
最佳答案
我个人不喜欢的方式setuptools混合代码和数据在概念上和实现方面。我认为这是执行,这让你在这里。对于setuptools来查找和使用package_data它需要的数据驻留在一个python包。 python包可以是一个目录,但是目录中需要有一个__init__.py文件。所以它看起来像你需要以下(空是好的)文件:

./package_fiddler/data/__init__.py
./package_fiddler/data/stylesheets/__init__.py

转载注明原文:Python包装:数据文件正确放在tar.gz文件中,但未安装到虚拟环境中 - 代码日志