如何离线安装ruamel.yaml python库?

How to install ruamel.yaml python library offline?

我正在尝试在没有互联网连接的 Centos 7 机器上安装 ruamel.yaml python 库。我试过这个:

  1. 使用本地存储库安装了 libyaml-devel、python-devel、python-pip

  2. 从 pypi 下载 ruamel.yaml-0.13.14.tar & ruamel.ordereddict-0.4.6.tar(依赖项)。

  3. 现在我可以使用 pip install 安装 ruamel.ordereddict, 但是当我尝试以同样的方式安装 ruamel.yaml 时,出现以下异常:

    [root@limulus ruamel.yaml-0.13.14]# pip install .
    Processing /tmp/python/ruamel.yaml-0.13.14
    Complete output from command python setup.py egg_info:
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "/usr/lib/python2.7/site-packages/setuptools/__init__.py", line 2, in <module>
        from setuptools.extension import Extension, Library
      File "/usr/lib/python2.7/site-packages/setuptools/extension.py", line 5, in <module>
        from setuptools.dist import _get_unpatched
      File "/usr/lib/python2.7/site-packages/setuptools/dist.py", line 7, in <module>
        from setuptools.command.install import install
      File "/usr/lib/python2.7/site-packages/setuptools/command/__init__.py", line 8, in <module>
        from setuptools.command import install_scripts
      File "/usr/lib/python2.7/site-packages/setuptools/command/install_scripts.py", line 3, in <module>
        from pkg_resources import Distribution, PathMetadata, ensure_directory
      File "/usr/lib/python2.7/site-packages/pkg_resources.py", line 74, in <module>
        import parser
      File "parser.py", line 77, in <module>
        from ruamel.yaml.error import MarkedYAMLError                  # type: ignore
      File "/usr/lib64/python2.7/site-packages/ruamel/__init__.py", line 5, in <module>
        __import__('pkg_resources').declare_namespace(__name__)
    AttributeError: 'module' object has no attribute 'declare_namespace'
    
    ----------------------------------------
    Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-oOWX1x-build/
    

在离线模式下安装 python 库的正确方法是什么?

看起来您一直在扩展 tar 文件,这不是必需的,但我不确定这是否是您收到此错误的原因,您可能还缺少 typing依赖。

您不应该使用安装的系统 pip,它几乎已经过时,并且在某些系统上实际上会因为那些旧版本中未修复的错误而导致问题。

你也不应该做的是在 Python virtualenv 之外使用 pip 安装软件包,因为这可能会破坏你的系统 updates/overwrites 系统中的东西 site-packages/dist-packages 目录。下面提供的解决方案仅在系统目录中安装 pip/wheels/virtualenv,这是 AFAIK 安全的,但如果有必要,也有解决方法。

您还应该考虑使用提供的轮子来安装包。这样 C 扩展就不需要编译了。

在联机的机器上执行:

mkdir /tmp/offline
cd /tmp/offline
# your python-pip installed pip might not support wheels
wget https://pypi.python.org/packages/11/b6/abcb525026a4be042b486df43905d6893fb04f05aac21c32c638e939e447/pip-9.0.1.tar.gz
wget https://pypi.python.org/packages/a7/37/947b4329c4a3c72093b6c8e9b4be8c7f10c32dbb78848d3a234ce01c059d/wheel-0.30.0a0.tar.gz
wget https://pypi.python.org/packages/6f/86/3dc328ee7b1a6419ebfac7896d882fba83c48e3561d22ddddf38294d3e83/virtualenv-15.1.0-py2.py3-none-any.whl

现在下载所需的轮子(.tar.gz 如果没有):

wget https://pypi.python.org/packages/96/4b/5251bf469f37e49e0c92f841b5b3ef01a1c9d652cc018df470e5ae235eb8/ruamel.ordereddict-0.4.9-cp27-cp27mu-manylinux1_x86_64.whl
wget https://pypi.python.org/packages/63/40/c38b857ec6a083e534ee9a9f655741120d4bfd9139232681f976cf44272b/ruamel.yaml-0.13.14-cp27-cp27mu-manylinux1_x86_64.whl
wget https://pypi.python.org/packages/b6/0c/53c42edca789378b8c05a5496e689f44e5dd82bc6861d1ae5a926ee51b84/typing-3.5.3.0.tar.gz

将这六个文件复制到你离线系统的新目录下,然后

sudo pip install pip*.tar.gz wheel*.tar.gz
sudo pip install virtualenv*
virtualenv ~/ruamel
source ~/ruamel/bin/activate
pip install typing* ruamel*

这为您提供了一个安装了 ruamel.yaml 的 virtualenv,只需在其中添加您的应用程序即可。

此处使用的下载是截至 2017-01-07 的最新下载,如有必要,您可以使用浏览器(在在线系统上)获取更多最新的。