【问题标题】:Loop over a directory and run easy_install on packages in a particular order循环遍历目录并以特定顺序在包上运行 easy_install
【发布时间】:2024-04-13 00:50:02
【问题描述】:

我对 bash 脚本还很陌生。

我有一个必须离线运行的 bash 脚本(应该可以在没有互联网的情况下工作)。该脚本解压缩 xyz.tar.gz 文件并在一堆本身是 .tar.gz 文件的 python 包上执行 easy_install。我正在安装的 4 个软件包是:

multi_key_dict-2.0.3.tar.gz
pbr-1.10.0.tar.gz
python-jenkins-0.4.12.tar.gz
six-1.10.0.tar.gz

问题是,6-1.10.0.tar.gz 是 python-jenkins 包的依赖。当我运行脚本时,它会尝试按字母顺序安装这些包;因此试图在六点之前安装 python-jenkins。由于没有互联网来获取依赖包,所以它失败了。 (请注意,我要求我通过 pip 使用 easy_install 并且主机应该离线工作)

如何编写脚本以在安装 python-jenkins 之前安装其余 3 个软件包?我不想手动写 4 行来安装每个包。

【问题讨论】:

    标签: python bash jenkins


    【解决方案1】:

    这样的事情可能会奏效:

    for package in m* pb* s* py*; do
        easy_install "$package"
    done
    

    以上假设您位于包含这四个文件的目录中,并且easy_install 需要文件名作为第一个也是唯一的参数。

    基本上变量package会按这个顺序赋值:

    multy_key_dict-2.0.3.tar.gz
    pbr-1.10.0.tar.gz
    six-1.10.0.tar.gz
    python-jenkins-0.4.12.tar.gz
    

    我希望你明白这个 for 循环的意义。

    【讨论】:

    • 如果只有 4 个包,我个人会选择展开的版本(四个 easy_install 命令依次排列)——干净且可读。
    • @SuperSaiyan 没错,我也会这样做。但我不知道easy_install 是如何工作的,OP 明确表示:I don't want to write 4 lines manually to install each package.
    • 感谢@andlrc 的回答。有没有办法让我的脚本“最后安装这个特定的包?对于其他人来说,顺序无关紧要'?
    • @Alok 这样的事情可能有用:for package in [^p]* p[^y]* py*;
    最近更新 更多