Setup.py无法识别scripts,执行PBI_telegrambot遇ResolutionError错误
问题解决:pkg_resources.ResolutionError: Script 'scripts/telegram_bot.py' not found
问题背景
执行PBI_telegrambot命令时出现脚本找不到的错误,同时setup.py配置与项目结构存在不匹配问题。
原setup.py代码
from setuptools import setup, find_packages setup( name='PBI_telegrambot', version='0.0.1', author='junscience', description='Embedding app for classification', packages=find_packages(include =['telegram_bot.py', 'login.py', 'screenshot.py']), scripts=['telegram_bot.py'], entry_points={ 'console_scripts':[ 'PBI_telegrambot=telegram_bot:main' ] } )
项目目录结构
├── build │ ├── bdist.linux-x86_64 │ └── scripts-3.8 │ └── telegram_bot.py ├── dist │ └── PBI_telegrambot-0.0.1-py3.8.egg ├── env.txt ├── login.py ├── PBI_telegrambot.egg-info │ ├── dependency_links.txt │ ├── entry_points.txt │ ├── PKG-INFO │ ├── requires.txt │ ├── SOURCES.txt │ └── top_level.txt ├── __pycache__ │ ├── login.cpython-311.pyc │ └── screenshot.cpython-311.pyc ├── requirements.txt ├── screenshot.py ├── setup.py └── telegram_bot.py
错误信息
/usr/lib/python3/dist-packages/requests/__init__.py:89: RequestsDependencyWarning: urllib3 (2.2.2) or chardet (5.2.0) doesn't match a supported version! warnings.warn("urllib3 ({}) or chardet ({}) doesn't match a supported " Traceback (most recent call last): File "/usr/local/bin/PBI_telegrambot", line 11, in <module> load_entry_point('PBI-telegrambot==0.0.1', 'console_scripts', 'PBI_telegrambot')() File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 490, in load_entry_point return get_distribution(dist).load_entry_point(group, name) File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 2854, in load_entry_point return ep.load() File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 2445, in load return self.resolve() File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 2451, in resolve module = __import__(self.module_name, fromlist=['__name__'], level=0) File "/usr/local/bin/telegram_bot.py", line 4, in <module> __import__('pkg_resources').run_script('PBI-telegrambot==0.0.1', 'telegram_bot.py') File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 667, in run_script self.require(requires)[0].run_script(script_name, ns) File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 1452, in run_script raise ResolutionError( pkg_resources.ResolutionError: Script 'scripts/telegram_bot.py' not found in metadata at '/home/user/.local/lib/python3.8/site-packages/PBI_telegrambot-0.0.1.dist-info'
问题分析
find_packages()用于查找带__init__.py的Python包目录,但你的项目是单个独立.py文件,并非包结构,该配置完全不适用,导致文件未被正确打包。- 同时配置
scripts和entry_points,功能重叠引发冲突,且scripts配置会让安装生成的脚本尝试调用不存在的路径。
解决步骤
1. 清理残留文件
先卸载已安装包,删除构建残留:
pip uninstall -y PBI_telegrambot rm -rf build dist PBI_telegrambot.egg-info
2. 修改setup.py
替换find_packages为py_modules指定单个模块,移除冗余的scripts配置:
from setuptools import setup import os setup( name='PBI_telegrambot', version='0.0.1', author='junscience', description='Embedding app for classification', py_modules=['telegram_bot', 'login', 'screenshot'], entry_points={ 'console_scripts':[ 'PBI_telegrambot=telegram_bot:main' ] }, install_requires=open('requirements.txt').read().splitlines() )
注:通过
install_requires自动读取requirements.txt依赖,安装时无需单独执行pip install -r requirements.txt。
3. 重新安装项目
pip install .
4. 验证运行
直接执行命令:
PBI_telegrambot
另外,针对requests的依赖警告,可通过升级requests解决:
pip install --upgrade requests
内容的提问来源于stack exchange,提问作者Антон Попенко
相关产品推荐
相关产品推荐

