pip install .安装本地Python包成功但无法导入,加-e参数运行正常
问题原因与排查方案
核心差异点:pip install -e .(可编辑安装)和pip install .(普通安装)的文件处理逻辑完全不同:可编辑安装是直接在Python的site-packages目录下创建指向你本地项目目录的链接,只要本地项目目录里存在对应的包文件就能导入,不需要严格匹配打包配置;普通安装只会将你在打包配置中明确声明要包含的文件拷贝到site-packages,漏声明的文件不会被安装。
你遇到的情况90%以上是打包配置(setup.py)漏写包声明导致的,按以下步骤排查即可:
- 检查setup.py的
packages参数配置
如果你用setuptools打包,必须明确声明要打包的包列表,推荐用find_packages()自动扫描,示例正确配置:
同时确认你的项目结构符合要求:需要被导入的包目录下必须存在from setuptools import setup, find_packages setup( name="你的包的pip显示名", version="0.1", packages=find_packages(), # 必须加这行,否则不会自动扫描项目里的包 # 其余配置省略 )__init__.py文件(空文件即可,Python3.3+虽支持无__init__.py的命名空间包,但普通项目添加该文件可避免大量扫描异常)。 - 验证包名与导入名是否匹配
setup.py里的name字段是pip安装、pip freeze显示的名字,和实际导入的包名可以完全不同:比如name设为my-demo-pkg,实际包目录名为my_demo,导入时需要执行import my_demo而非import my-demo-pkg,不要混淆两个名称。 - 检查安装后的site-packages内容
执行pip show <你的pip包名>,找到Location字段对应的site-packages目录,进入目录查看:如果只有对应包的.egg-info元数据文件夹,没有实际的包目录,即可确定是打包配置漏写packages参数的问题。 - 清除缓存重试
执行以下命令清理旧的打包缓存和pip缓存,再重新安装:rm -rf build dist *.egg-info pip cache purge pip install .
内容的提问来源于stack exchange,提问作者lcdumort
相关产品推荐
相关产品推荐

