Python打包: Data files are put properly in tar. gz文件但没有安装到虚拟环境

标签 python packaging setuptools setup.py

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

我发现 MANIFEST.in 负责将非 .py 文件放入 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_datainclude_package_datadata_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 放在 stylesheets 中,texts 文件夹中的所有数据文件也会以某种方式正确安装! !!这让我很困惑。

Tree 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

最佳答案

找到适合我的解决方案 here .

使用 setuptools==2.0.2 我做了:

setuptools.setup(
    ...
    packages=setuptools.find_packages(),
    include_package_data=True,  # use MANIFEST.in during install
    ...
)

关于Python打包: Data files are put properly in tar. gz文件但没有安装到虚拟环境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13288188/

相关文章:

python - 意外的导入行为 : non-existing module imported

python - CentOS 5.8 对 Python 2.4 的依赖?

python - 如何向另一个具有不同设置的蜘蛛产生 Scrapy 请求?

r - R CMD 检查错误 : Packages required but not available

python - 修复 rpm/setuptools 打包的权限

python - djangoproject.com 如何部署到产品?我应该打包我的 django 项目来部署它吗?

python - Factory Boy 随机选择字段选项 "choices"

python - python中的链表和递归

python - 仅安装依赖项 - setuptools

python setup.py 构建忽略一些文件