1

我正在尝试在没有 Internet 连接的 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(dependency)。

  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库的正确方法是什么?

4

1 回答 1

1

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

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

你也不应该做的是pip在 Python virtualenv 之外安装包,因为当它更新/覆盖系统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 的最新下载,如有必要,您可以使用浏览器(在在线系统上)获取更多最新下载。

于 2017-03-07T10:19:52.890 回答