【问题标题】:setup.py package bundled file is not installed未安装 setup.py 包捆绑文件
【发布时间】:2020-01-15 21:21:15
【问题描述】:

我有一个文件正确显示在源代码分发和轮子中,但安装时它没有出现在站点包中。

我的项目结构如下:

|-- README.md
|-- config
|   `-- log.ini
|-- oauc
|   |-- __init__.py
|   |-- odoo_driver.py
|   `-- page.py
|-- requirements.txt
`-- setup.py

有问题的文件是config/log.ini

我的设置如下所示:

import setuptools

setuptools.setup(
    name='oauc',
    version='0.0.1',
    packages=setuptools.find_packages(),
    data_files=[('oauc', ['config/log.ini'])],
    include_package_data=True
)

这是结果oauc-0.0.1.tar.gz

|-- PKG-INFO
|-- README.md
|-- config
|   `-- log.ini
|-- oauc
|   |-- __init__.py
|   |-- odoo_driver.py
|   `-- page.py
|-- oauc.egg-info
|   |-- PKG-INFO
|   |-- SOURCES.txt
|   |-- dependency_links.txt
|   |-- requires.txt
|   `-- top_level.txt
|-- setup.cfg
`-- setup.py

看起来不错。

但是,当我使用 pip install src/dist/oauc-0.0.1.tar.gz 安装时(src 是项目目录的符号链接),生成的安装 venv/lib/python3.7/site-packages/oauc 不包含该文件:

|-- __init__.py
|-- __pycache__
|   |-- __init__.cpython-37.pyc
|   |-- odoo_driver.cpython-37.pyc
|   `-- page.cpython-37.pyc
|-- odoo_driver.py
`-- page.py

我认为它应该在那里。在我的初始化文件中:

import logging.config
import pkg_resources

logging.config.fileConfig(pkg_resources.resource_filename(__name__, 'config/log.ini'))

调用pkg_resources.resource_filename(__name__, 'config/log.ini') 返回venv/lib/python3.7/site-packages/oauc/config/log.ini

如何使与包捆绑在一起的log.ini 文件在运行时可访问,以及如何找到他的位置?

【问题讨论】:

  • 哦,如果你有机会知道学习 setup.py 的好资源,做什么和怎么做,我会接受的。因为官方文档对学习并不友好。

标签: python package setup.py pkg-resources


【解决方案1】:

我在包内移动了文件,使用了 package_data 而不是 data_files,添加了一个 Manifest.in 文件。我猜 data_files 降落在其他地方。无论如何,将 y 配置文件放在我的包中并不太奇怪。 所以最终的结果是:

结构:

|-- MANIFEST.in
|-- README.md
|-- oauc
|   |-- __init__.py
|   |-- config
|   |   |-- __init__.py
|   |   `-- log.ini
|   |-- odoo_driver.py
|   `-- page.py
|-- requirements.txt
`-- setup.py

MANIFEST.in:

include oauc/config/log.ini

setup.py:

import setuptools

setuptools.setup(
    name='oauc',
    version='0.0.1',
    packages=setuptools.find_packages(),
    package_data={'config': ['log.ini']},
    include_package_data=True
)

我猜你不应该使用 pkg_resources 查询属性 data_files 指定的文件,因为它们不在包内,这是我的主要错误。

【讨论】:

猜你喜欢
  • 2017-09-20
  • 1970-01-01
  • 2014-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多