使用setuptools(setup.py install)将自定义Python项目部署至site-packages
解决自定义Python项目无法从site-packages导入的问题
我太懂这种手动复制源码的痛苦了——每次改完代码还要重复操作,效率低到爆炸。咱们来一步步搞定这个问题:
1. 先确认你的setup.py配置是否正确
很多时候导入失败的根源是setup.py没配置对,导致生成的egg文件不包含正确的模块结构。推荐用find_packages()自动识别你的包,而不是手动写包名,示例配置如下:
from setuptools import setup, find_packages setup( name="your_custom_package", # 你的包名,导入时要用这个名字 version="0.1.0", packages=find_packages(), # 自动扫描所有含__init__.py的子目录 author="Your Name", description="A custom Python package", # 其他可选配置,比如entry_points、install_requires等 )
注意:你的项目结构要符合规范——根目录下要有一个和包名一致的文件夹,里面必须包含__init__.py(可以是空文件,但必须存在),比如:
your_project/ ├── setup.py └── your_custom_package/ ├── __init__.py └── your_module.py
2. 使用开发模式(推荐!)
这才是解决“修改代码后重复安装”痛点的最佳方案,它不会把代码复制到site-packages,而是在site-packages里创建一个链接指向你的本地项目目录,修改代码后直接生效,无需重新安装。
在项目根目录(setup.py所在的文件夹)执行以下命令:
pip install -e . # 或者用旧一点的方式:python setup.py develop
执行后,你就可以在任何Python脚本里直接导入你的包了,而且修改本地代码后立即生效。
3. 检查Python环境是否匹配
有时候你可能同时安装了多个Python版本(比如系统Python和conda环境),导致python setup.py install把egg安装到了另一个环境的site-packages里,而你运行脚本用的是另一个Python解释器。
可以用以下命令排查:
- 查看当前脚本使用的Python路径:
which python(Linux/macOS)或where python(Windows) - 查看Python的site-packages路径:
python -c "import sys; print('\n'.join(sys.path))"
确认生成的.egg文件是否在这个路径列表里。
4. 如果坚持用常规install方式
如果不想用开发模式,确保安装后你的包能被识别,可以尝试:
- 执行
python setup.py install后,检查site-packages里是否有你的包的.egg文件,或者是否有解压后的包目录 - 如果只有.egg文件无法导入,可以用
easy_install your_package_name-0.1.0-py3.x.egg手动安装(替换成你的egg文件名)
内容的提问来源于stack exchange,提问作者danchy
相关产品推荐
相关产品推荐

