You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

pip未自动安装依赖问题:基于自定义setup.py配置排查

排查pip未自动安装依赖的问题

结合你的setup.py和场景,我整理了几个常见原因和对应的解决办法,你可以逐一排查:

1. 检查安装命令是否意外跳过依赖

先确认你有没有用--no-deps这类会跳过依赖安装的参数,或者环境变量里有没有相关配置。确保用标准的安装命令:

pip install mypackage --index-url <你的内部仓库地址>

如果之前加了--no-deps,去掉后重新安装试试。

2. 修复__version__导入的潜在问题

你的setup.py开头直接从mylib导入__version__,但如果mylib的代码(比如__init__.py)本身依赖paramiko,那在打包阶段这个导入会失败,导致setup函数没正确执行,依赖信息根本没被写入包的元数据里。

解决办法是换一种安全的版本号获取方式,比如直接写在setup.py里:

from setuptools import setup
# 直接定义版本号,避免提前导入包内模块
__version__ = "0.1.0"
requirements = ['paramiko']
tests_require = ['pytest']

def main():
    setup(
        name='mypackage',
        description='A collection of utilities',
        url='http://example.net',
        version=__version__,
        author='Me Me',
        author_email='me@me.net',
        packages=['mylib'],
        zip_safe=False,
        install_requires=requirements,
        tests_require=tests_require,
    )

if __name__ == '__main__':
    main()

重新打包上传后,依赖信息就能被正确识别了。

3. 优先上传wheel包而非源码包

源码包(sdist)在安装时需要本地构建,偶尔会因为环境问题导致元数据读取异常;而wheel包是预构建的,元数据更稳定可靠。

重新打包并上传:

# 先安装构建工具
pip install build
# 同时构建源码包和wheel包
python -m build
# 用twine或你们内部的工具上传到仓库
twine upload --repository-url <你的内部仓库地址> dist/*

之后用pip安装这个wheel包,大概率能自动拉取依赖。

4. 升级pip到最新版本

旧版本的pip对setuptools的字段支持可能有bug,先升级pip:

pip install --upgrade pip

再重新安装你的包试试。

5. 验证包的元数据是否包含依赖

你可以下载包到本地,检查它的元数据里有没有paramiko:

# 下载包到当前目录(不安装依赖)
pip download mypackage --index-url <你的内部仓库地址> --no-deps
# 如果是wheel包,查看元数据
unzip -p mypackage-*.whl mypackage.dist-info/METADATA | grep -A 10 "Requires-Dist"
# 如果是源码包,解压后查看PKG-INFO
tar xzf mypackage-*.tar.gz
cat mypackage-*/PKG-INFO | grep -A 10 "Requires-Dist"

如果这里看不到paramiko的依赖项,说明打包阶段确实没把依赖加进去,回到前面的步骤排查setup.py的问题。

内容的提问来源于stack exchange,提问作者blueFast

火山引擎 最新活动