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

时间:2017-03-07 09:13:15

标签: python pip ruamel.yaml

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

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

  2. 已下载ruamel.yaml-0.13.14.tar&来自pypi的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/
    
  4. 在离线模式下安装python库的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

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

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

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