python - 如何在 AWS Linux 上完全重新安装 python(没有 yum)

标签 python linux amazon-web-services rpm yum

一系列不幸事件(在开发中,谢天谢地)基本上毁了我的python2.7环境。 /usr/bin 中的可执行文件被破坏,一些 rpms 运行异常。所以我不再有可行的 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 镜像中删除 python (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) 并重新安装没有 yum 的好处,然后安装必要的 yum 位使得 /usr/bin/yum(几乎只是 import yum)起作用?

我知道这个问题是一个部分的骗局,但我搜索了 stackoverflow,一切似乎都回到了用 yum 安装 python(我不能)或用 pip 安装模块(继续用 yum 安装 pip!)或非常广泛地说 rpm --erase vagueness 后跟 rpm -i vagueness

我确实从源代码手动重建了一个 python exec 并且它运行了,但是当然它没有 yum 并且我似乎无法在 pip search 中找到任何东西(我让 pip 再次运行)将生成我寻找的 yum 模块。您可能认为 pip install yum 就在那里,但没有。也许我错过了什么......?

我不得不相信,也许有一种缓慢但稳定的方法可以做到这一点。敲除 /usr/bin/python2.7 exec 不应该造成我似乎遇到先有鸡还是先有蛋的问题的情况...

最佳答案

在执行这些步骤之前,将 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

关于python - 如何在 AWS Linux 上完全重新安装 python(没有 yum),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48389406/

相关文章:

Python - 按字母顺序排列单词

c++ - Linux 中伪终端的读写问题

python - 修复数据框中重复的索引名称

python - 在 Google App Engine 之外使用 webapp2 提供样式表

Linux 上的 Java 应用程序

linux - 是否有将任何类型的 tarball(zip、gzip、bzip2)文件解压缩/解压缩/解压缩到 Linux KERNEL 目录中的实现?

amazon-web-services - AWS 指标 : Your search - billing - did not match any metrics

java - 如何从非结构化日志创建cloudwatch指标过滤器?

amazon-web-services - aws cloudformation 包 cli 如何获取上次运行的 MD5 校验和?

python - Postgres 用户未连接到数据库。即使环境变量设置正确