Windows下Python3.9使用pip本地安装自定义Python包报错咨询
问题原因说明
1. 「WARNING: Ignoring invalid distribution -ip」警告原因
该警告是Python环境的site-packages目录存在损坏的安装残留导致,通常是之前安装/卸载pip类包时进程中途中断,生成了名称以开头的畸形目录(此处为ip相关目录),pip扫描依赖时无法识别该类目录就会抛出警告。
解决方法:进入c:\python39\lib\site-packages目录,找到所有名称包含~ip的文件夹直接删除即可,警告会自动消失。
2. pip install 报错原因
你执行pip install bacnet-restul报错有两个问题:
- 包名拼写错误:你的包命名为
bacnet-restful,命令中少写了字母f,写成了bacnet-restul - 本地安装逻辑错误:直接写包名的安装方式,pip会默认去PyPI公共源检索包,你没有将该包上传到PyPI,自然检索不到匹配的安装包。
3. 你修改后的setup.py可运行的本质原因
你最初的setup.py本身结构没有问题,报错是因为代码中读取的是README.md,但你项目根目录下的说明文件命名为README,无.md后缀,执行时会触发文件不存在的错误。你改用distutils版本的setup.py时去掉了读取README的逻辑,因此可以正常运行。但注意该版本中你将aiohttp、BAC0这类第三方依赖写在了py_modules参数中属于错误用法,py_modules是用来指定你要打包的单个独立py文件的,第三方依赖应该写在install_requires参数中。
pip本地安装Python包正确操作规范
- 先确认项目结构符合要求:需要打包的业务模块目录(此处为
modulepkg)必须包含__init__.py文件,你的现有结构符合要求 - 整理setup.py参数:
- 用
setuptools.find_packages()自动识别所有带__init__.py的业务模块,不需要手动逐个指定 - 第三方依赖写在
install_requires参数中,示例:install_requires=['aiohttp', 'BAC0', 'aiohttp_pydantic'] - 确保代码中引用的本地文件(如README)路径和实际项目中的文件路径、名称完全匹配
- 用
- 本地安装操作:
- 普通安装:在setup.py所在的根目录执行
pip install .,包会被安装到Python的site-packages目录,代码修改后需要重新执行安装命令才能生效 - 开发模式安装(开发阶段推荐):执行
pip install -e .,相当于给本地项目代码创建软链接,修改代码后不需要重新安装即可生效
- 普通安装:在setup.py所在的根目录执行
- 若需要生成wheel安装包,可先执行
python setup.py bdist_wheel,生成的.whl文件会存放在项目根目录的dist文件夹中,后续可直接通过pip install 包名.whl命令安装
内容的提问来源于stack exchange,提问作者bbartling
相关产品推荐
相关产品推荐

