我有一个文件,该文件正确显示在源代码发行版和发行版中,但安装后未出现在站点软件包中。
我的项目结构如下:
|-- 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
文件,以及如何找到他的位置?
答案 0 :(得分:0)
我将文件移动到包中,使用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属性指定的文件,因为它们不在软件包中,这是我的主要错误。