执行python setup.py install后调用runner.py报pkg_resources.ResolutionError如何解决
问题原因
python setup.py develop属于开发模式,会把本地项目路径软链接到Python库目录,脚本直接指向本地bin目录下的文件,不会严格校验egg-info元数据里的脚本列表- 你本地残留了之前
develop模式生成的旧my-runner.egg-info目录,重新执行install时setuptools会复用旧的元数据,没有把scripts配置的文件更新到元数据列表中,导致运行时找不到对应的脚本记录 - 额外注意:当前项目根目录没有带
__init__.py的Python包,find_packages()会返回空列表,属于冗余配置,不影响脚本安装但可以优化
解决方案
- 先清理所有旧的构建缓存和安装残留
# 卸载已安装的my-runner pip uninstall -y my-runner # 清理构建产物和旧的egg-info目录 rm -rf build dist *.egg-info
- 重新执行安装命令,建议直接用pip安装代替原生setup.py调用,兼容性更好:
pip install .
可选优化(更规范的脚本声明方式)
如果想要更跨平台、更符合setuptools规范的脚本声明,可以把scripts参数替换为entry_points配置,修改后的setup.py参考如下:
from setuptools import setup setup( name='my-runner', version='1.0.0', license='private', author='MyName', author_email='myname@myemail.com', description='My Runner', # 没有实际业务包可以直接写空列表 packages=[], entry_points={ 'console_scripts': [ 'runner = bin.runner:main', 'some-other = bin.some_other_file:main' ] } )
注意:该方式需要你的runner.py和some_other_file.py里有可调用的main函数作为执行入口,不需要给脚本加可执行权限就能正常调用
内容的提问来源于stack exchange,提问作者A1122
相关产品推荐
相关产品推荐

