【问题标题】:How to completely reinstall python (WITHOUT yum) on AWS Linux如何在 AWS Linux 上完全重新安装 python(没有 yum)
【发布时间】:2018-01-23 04:50:05
【问题描述】:

一系列不幸的事件(在 dev 中,谢天谢地)基本上毁了我的 python2.7 环境。 /usr/bin 中的可执行文件被破坏,一些 rpm 运行异常。所以我不再有一个可行的import yum 环境。我实际上启动了另一个 EC2 实例并复制了 python exec,希望 lib 路径相同,但遗憾的是我得到了这个(使用 -v 运行):

( various imports then )
import gpg.core # precompiled from /usr/lib64/python2.7/site-packages/gpg/core.pyc
# /usr/lib64/python2.7/site-packages/gpg/gpgme.pyc matches 
/usr/lib64/python2.7/site-packages/gpg/gpgme.py
import gpg.gpgme # precompiled from /usr/lib64/python2.7/site-packages/gpg/gpgme.pyc
dlopen("/usr/lib64/python2.7/site-packages/gpg/_gpgme.so", 2);
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib64/python2.7/site-packages/gpg/__init__.py", line 101, in <module>
  from . import core
File "/usr/lib64/python2.7/site-packages/gpg/core.py", line 34, in <module>
  from . import gpgme
File "/usr/lib64/python2.7/site-packages/gpg/gpgme.py", line 17, in <module>
_gpgme = swig_import_helper()
File "/usr/lib64/python2.7/site-packages/gpg/gpgme.py", line 16, in swig_import_helper
return importlib.import_module('_gpgme')
File "/usr/lib64/python2.7/importlib/__init__.py", line 37, in import_module
__import__(name)
ImportError: No module named _gpgme

这有点令人不安,因为_gpgme.sogpgme.pyldd 位于同一目录中,_gpgme.so 看起来不错:

-bash-4.2$ ldd /usr/lib64/python2.7/site-packages/gpg/_gpgme.so
linux-vdso.so.1 =>  (0x00007ffe2cf6d000)
libpython2.7.so.1.0 => /usr/lib64/libpython2.7.so.1.0 (0x00007ff166d5d000)
libgpgme.so.11 => /usr/lib64/libgpgme.so.11 (0x00007ff166b27000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007ff16690b000)
libc.so.6 => /lib64/libc.so.6 (0x00007ff166547000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007ff166343000)
libutil.so.1 => /lib64/libutil.so.1 (0x00007ff166140000)
libm.so.6 => /lib64/libm.so.6 (0x00007ff165e3e000)
libassuan.so.0 => /usr/lib64/libassuan.so.0 (0x00007ff165c2e000)
libgpg-error.so.0 => /lib64/libgpg-error.so.0 (0x00007ff165a2a000)
/lib64/ld-linux-x86-64.so.2 (0x00007ff1673e7000)

所以问题是:如何强制从 AWS Linux 映像 (Linux version 4.9.75-25.55.amzn1.x86_64 (mockbuild@gobi-build-64013) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-11) (GCC) ) #1 SMP Fri Jan 5 23:50:27 UTC 2018) 中删除 python 并重新安装它没有 yum 的好处,然后安装必要的 yum 位,以便 @ 987654332@(几乎就是import yum)有效吗?

我知道这个问题是部分欺骗,但我已经搜索了 stackoverflow,一切似乎都回到了用 yum 安装 python(我不能)或用 pip 安装模块(它继续用 yum 安装 pip!)或者很笼统地说rpm --erase vagueness,后跟rpm -i vagueness

我确实从源代码手动重建了一个 python exec 并运行,但它当然不附带 yum 并且我似乎在 pip search 中找不到任何会产生 @ 987654338@我寻求的模块。你会认为pip install yum 会在那里,但没有。也许我错过了什么……?

我必须相信,也许有一种缓慢但稳定的方法可以做到这一点。淘汰/usr/bin/python2.7 exec 不应该造成我似乎有鸡和蛋问题的情况......

【问题讨论】:

    标签: python linux amazon-web-services rpm yum


    【解决方案1】:

    在执行这些步骤之前,请将 python-package-version.rpm 文件下载到同一台计算机上的本地目录。请参阅下面的步骤 0 以获取确切的版本。

    0. Get the python package name
    $ rpm -q python
    
    1. Remove python forcefully
    $ rpm -e --nodeps <python-package-name>
    
    2. Install the rpm from local dir.
    $ rpm -ivvh python-some-version.rpm
    
    3. Retry your yum command
    $ yum install <some package>
    

    如果 (3) 失败,您可以使用 rpm 重新安装 yum,方法与重新安装 python 相同。

    从 OP 的评论来看,python 似乎从未安装在系统上,否则依赖项将在系统上。如果在第 2 步中,它要求提供依赖项,则必须手动将它们下载到相同的本地目录,然后调用。

    $ rpm -ivh *.rpm  
    

    或先进行试运行

    $ rpm -ivh --test *.rpm
    

    【讨论】:

    • 0 和 1 进展顺利。 :-) 在 2 上得到了这个:错误:失败的依赖项:python-libs(x86-64) = 2.7.13-3.fc25 需要 python-2.7.13-3.fc25.x86_64 python-pip 需要 python -2.7.13-3.fc25.x86_64 python-2.7.13-3.fc25.x86_64 需要python-setuptools 我必须手动关闭它们吗?
    • 我以为你安装了 python,但不知何故损坏了。您的评论告诉我系统上从未安装过 python,否则依赖项将已经安装。在这种情况下,是的,将依赖项下载到相同的本地目录。查看更新的答案。
    • @iamuser :刚刚开始那段旅程。是拉每个(如python-libs)并运行#2以查找其他依赖项的问题吗?没有办法进行传递闭包......我想这就是我们有 yum 的原因。
    • 正确。 rpm 将无法解决依赖关系,yum 会为您解决。不幸的是,除了一个一个下载依赖项之外别无他法。由于您的系统已启动并正在运行,因此我认为此列表不会太长。
    • 正确。对于我之前的粗心大意,这是一个有点乏味但合适的惩罚。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2017-10-21
    • 2015-02-05
    • 1970-01-01
    • 2021-09-22
    • 1970-01-01
    • 1970-01-01
    • 2017-02-17
    • 2014-09-10
    相关资源
    最近更新 更多