setuptools执行setup.py install后包函数找不到,develop模式正常
解决
setup.py install后无法导入db的问题 我之前踩过完全一样的坑!这种情况大概率是你的setuptools打包配置或者包的导入结构出了问题——毕竟develop模式直接用本地源码目录,而install是把打包后的文件复制到site-packages,两者的包加载逻辑有差异。下面是我总结的排查和解决步骤:
1. 先检查setup.py的打包范围
你大概率是没把包含db变量的模块正确纳入打包范围。比如:
- 如果你的
db定义在your_package/core.py这类子模块里,但setup.py里的packages参数只写了['your_package']而没用find_packages(),就会导致子模块没被打包进安装包。
正确的setup.py应该这样写:
from setuptools import setup, find_packages setup( name="your_package", version="0.1.0", packages=find_packages(), # 自动扫描所有子模块,避免漏包 # 其他配置(比如entry_points、install_requires等)... )
2. 确认包的__init__.py是否导出了db
即使模块被正确打包了,如果db只存在子模块里,没在根包的__init__.py中导入,直接from your_package import db也会失败。
比如db定义在your_package/core.py,那你需要在your_package/__init__.py里加上:
# 把db变量导入到根包的命名空间 from .core import db
这样dir(your_package)里才会出现db这个变量。
3. 清理旧打包缓存,重新安装
有时候修改了代码但没清理旧的build文件,导致安装的还是旧版本。执行以下命令彻底清理后再重新安装:
# 先卸载已安装的包 pip uninstall -y your_package # 删除build、dist和egg-info目录 rm -rf build/ dist/ your_package.egg-info/ # 重新打包安装 python setup.py install
4. 验证site-packages里的包结构
安装完成后,找到你的Python环境的site-packages/your_package目录,看看里面有没有包含db的那个.py文件。如果缺失,说明打包时确实漏了模块,回到第一步检查find_packages()的配置。
最后再试一次导入
完成上面的步骤后,打开Python终端测试:
import your_package print(dir(your_package)) # 现在应该能看到'db'了 from your_package import db # 不会再报错
内容的提问来源于stack exchange,提问作者Michael
相关产品推荐
相关产品推荐

