pip install与python3 -m build编译安装非纯Python包的差异咨询
python3 -m build与pip install构建非纯Python包的差异问题 我有一个需要编译的非纯Python包(netCDF4),发现从源码编译安装后可正常运行,但两种源码安装方式的结果存在差异:
- 方式1:使用
pip install ~/netcdf,编译和运行均正常 - 方式2:在
~/netcdf目录执行python3 -m build,再安装dist子目录下生成的wheel/tar.gz文件,生成的包似乎不完整
测试方式为执行命令:
python3 -c "from netCDF4 import Dataset"
方式1安装的版本可正常运行,方式2安装的版本则报错:
ImportError: cannot import name 'Dataset' from 'netCDF4' (unknown location)
核心疑问:python3 -m build与pip install生成的wheel有何差异?(注:不需要netCDF4相关帮助,仅想了解两种构建方式结果不同的原因)
复现步骤
wget https://github.com/Unidata/netcdf4-python/archive/refs/tags/v1.6.2.tar.gz tar -xvzf v1.6.2.tar.gz cd netcdf4-python-1.6.2 python3 -m build # 此命令会创建独立的干净虚拟环境用于构建(依赖build包) python3 -m venv ./env && source env/bin/activate pip3 install dist/netCDF4-1.6.2-cp310-cp310-linux_x86_64.whl python3 -c "from netCDF4 import Dataset" # 出现错误 deactivate && rm -rf ./env python3 -m venv ./env && source env/bin/activate pip install . python3 -c "from netCDF4 import Dataset"
补充细节:执行python3 -m build时会出现一些编译警告,而pip install时没有这些警告,但推测只是警告被屏蔽,并非pip修复了C代码问题。
内容的提问来源于stack exchange,提问作者bluppfisk
相关产品推荐
相关产品推荐

