Python包t-extractlib安装时依赖包未自动安装问题求助
解决Python包t-extractlib依赖未自动安装的问题
我正在构建名为t-extractlib的Python包,已经在setup.py、setup.cfg和pyproject.toml中配置了nltk、PyMuPDF等依赖,但安装该包时这些依赖并未自动安装。以下是包的目录结构、各配置文件内容,需要解决此问题:
包目录结构
root ├── src │ ├── ... (项目文件) │ ├── setup.py │ ├── setup.cfg │ └── requirements │ └── requirements.txt └── pyproject.toml
问题根源
你的配置存在三个核心问题,导致依赖未被自动安装:
pyproject.toml配置混淆:[build-system]下的requires是构建工具依赖,仅用于安装构建包所需的工具(如setuptools),不能放运行时依赖。你把nltk、PyMuPDF等运行时依赖都放在这里,导致安装包时不会自动安装这些依赖。- 多配置文件冲突:同时使用
setup.py、setup.cfg和pyproject.toml三个配置文件,setuptools会优先读取pyproject.toml的[project]配置,但你的pyproject.toml里没有定义运行时依赖的dependencies字段,所以依赖不生效。 - 包路径识别问题:
find_packages()默认从当前目录查找包,但你的代码在src目录下,可能导致包未被正确识别,间接影响依赖安装逻辑。
修复步骤
1. 修正pyproject.toml配置
将[build-system]中的运行时依赖移到[project]的dependencies字段,build-system.requires只保留构建必需的工具:
[build-system] requires = ["setuptools>=61.0", "wheel"] build-backend = "setuptools.build_meta" [project] name = "t-extractlib" version = "0.0.5" authors = [ { name="Trae Moore", email="my.email@gmail.com" }, ] description = "A package standardized for extracting data from PDFs" readme = "README.md" requires-python = ">=3.10" classifiers = [ "Programming Language :: Python :: 3", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", ] # 添加运行时依赖 dependencies = [ "nltk==3.8.1", "PyMuPDF==1.21.1", "camelot-py==0.11.0", "opencv-python==4.7.0.72", "ghostscript==0.7" ] [project.urls] "Homepage" = "https://github.com/traemoore/extractlib" "Bug Tracker" = "https://github.com/traemoore/extractlib/issues"
2. 统一配置文件(二选一)
为避免配置冲突,推荐保留一种配置方式:
- 推荐:纯
pyproject.toml:删除setup.py和setup.cfg,所有配置都放在pyproject.toml中(上面的修正已经包含完整配置)。 - 或者:保留
setup.cfg+pyproject.toml:删除pyproject.toml中的[project]部分,确保setup.cfg的[options]里的install_requires正确,同时在setup.cfg中添加包路径配置:[options] packages = find: package_dir = =src # 指定从src目录找包 install_requires = nltk==3.8.1 PyMuPDF==1.21.1 camelot-py==0.11.0 opencv-python==4.7.0.72 ghostscript==0.7 python_requires = >=3.10
3. 修正包发现路径
如果代码在src目录下,必须明确告诉setuptools包的位置:
- 若用
pyproject.toml,在[project]中添加:packages = { find = { where = "src" } } - 若用
setup.py,修改find_packages为:packages=find_packages(where="src"), package_dir={"": "src"},
4. 重新构建安装
执行以下命令清理旧构建并重新安装:
# 卸载旧包 pip uninstall t-extractlib -y # 删除构建缓存 rm -rf build dist *.egg-info # Windows用 rmdir /s /q build dist *.egg-info # 构建包 python -m build # 安装新构建的包 pip install dist/t_extractlib-0.0.5-py3-none-any.whl
内容的提问来源于stack exchange,提问作者Trae Moore
相关产品推荐
相关产品推荐

