使用pip install .无法安装自定义包:依赖导入问题排查
解决pip install -e .时找不到Cython/numpy的问题
问题原因
pip执行install -e .时会创建隔离的临时构建环境,默认不会继承当前虚拟环境中的构建依赖(如Cython、numpy),因此直接在setup.py顶部导入这些包会触发ModuleNotFoundError。而python setup.py --develop直接使用当前环境,所以能正常运行。
解决方案
方案1:修改setup.py添加构建依赖声明
在setup()函数中指定构建阶段所需依赖,让pip先在临时环境安装这些包再执行setup.py:
setup( # 保留你原有的name、version、packages等参数 setup_requires=[ 'Cython>=0.29', 'numpy>=1.21' ], install_requires=[ 'Cython>=0.29', 'numpy>=1.21' ], ext_modules=cythonize( Extension( # 替换为你的扩展模块配置,比如"your_package.core", sources=["src/your_package/core.pyx"] include_dirs=[np.get_include()] ) ) )
setup_requires:仅用于构建阶段,确保临时环境具备编译所需依赖install_requires:确保最终安装的运行环境也包含这些依赖,避免后续代码执行报错
方案2:使用pyproject.toml(推荐,符合PEP 518标准)
在项目根目录创建pyproject.toml文件,指定构建系统依赖,pip会自动读取并在临时环境安装:
[build-system] requires = ["setuptools>=61.0", "wheel", "Cython>=0.29", "numpy>=1.21"] build-backend = "setuptools.build_meta"
这种方式无需修改setup.py的导入逻辑,是官方推荐的现代构建方式,兼容性更强。
验证
确保mamba虚拟环境处于激活状态,重新执行pip install -e .即可完成安装。
内容的提问来源于stack exchange,提问作者Gerges
相关产品推荐
相关产品推荐

