如何克服-Windows上的pip安装Ansible失败,Windows上的文件名或扩展名太长


问题内容

如何修复Windows上的pip安装失败,出现以下错误。尝试安装ansible时出现此错误。

我怀疑所选的pip软件包存在问题。但是在基于Linux的系统上也可以正常工作。pip操作系统与OS会有什么区别吗

Exception:
Traceback (most recent call last):
  File "c:\python27\lib\site-packages\pip\basecommand.py", line 215, in main
    status = self.run(options, args)
  File "c:\python27\lib\site-packages\pip\commands\install.py", line 324, in run
    requirement_set.prepare_files(finder)
  File "c:\python27\lib\site-packages\pip\req\req_set.py", line 380, in prepare_files
    ignore_dependencies=self.ignore_dependencies))
  File "c:\python27\lib\site-packages\pip\req\req_set.py", line 620, in _prepare_file
    session=self.session, hashes=hashes)
  File "c:\python27\lib\site-packages\pip\download.py", line 821, in unpack_url
    hashes=hashes
  File "c:\python27\lib\site-packages\pip\download.py", line 663, in unpack_http_url
    unpack_file(from_path, location, content_type, link)
  File "c:\python27\lib\site-packages\pip\utils\__init__.py", line 605, in unpack_file
    untar_file(filename, location)
  File "c:\python27\lib\site-packages\pip\utils\__init__.py", line 553, in untar_file
    ensure_dir(path)
  File "c:\python27\lib\site-packages\pip\utils\__init__.py", line 83, in ensure_dir
    os.makedirs(path)
  File "C:\Python27\Lib\os.py", line 157, in makedirs
    mkdir(name, mode)
WindowsError: [Error 206] The filename or extension is too long: 'c:\\users\\user123\\appdata\\local\\temp\\pip-build-isnb2t\\ansible\\test/integration/targets/copy/files/subdir/subdir1/circles/subdir1/circles/subdir1/circles/subdir1/circles/subdir1/circles/subdir1/circles/subdir1/circles/subdir1/circles/subdir1/circles/subdir1/'

问题答案:

好吧,这似乎是一个已知的错误:

https://github.com/ansible/ansible/issues/31419

在Ansible
2.4.0中,模块副本使用测试套件中的符号链接:https
:
//github.com/ansible/ansible/tree/devel/test/integration/targets/copy/files/subdir/subdir1


circles -> ../
subdir3 -> ../subdir2/subdir3

Windows 10无法创建此目录树,因为路径太长。实际上,解决的路径是:

test/integration/targets/copy/files/subdir/subdir1/circles/subdir1/circles/subdir1/circles/subdir1/circles/subdir1/circles/subdir1/circles/subdir1/circles/subdir1/circles/subdir2/subdir3/

错误报告的结尾:

我们不支持直接在Windows计算机上安装ansible。您将需要类似linux的操作系统才能在

解决方法

一个可能的解决方法是在pypi上下载转轮,它不依赖于Linux或其他任何东西,可能是纯python:

https://pypi.python.org/pypi/ansible/2.5.0a

(该pip install ansible命令下载了“源”
.tgz归档文件,执行了测试,…并且路径问题在测试之内,所以让我们使用一个现成的预构建包)

下载后,使用 pip install path/to/the/wheel/file.whl

已在我的Windows 10计算机上测试并成功安装:

C:\Users\jotd>c:\Python27\Scripts\pip install C:\Users\jotd\Downloads\ansible-2.5.0a1-py2-none-any.whl
Processing c:\users\jotd\downloads\ansible-2.5.0a1-py2-none-any.whl
Requirement already satisfied: PyYAML in c:\python27\lib\site-packages (from ansible==2.5.0a1)
Collecting cryptography (from ansible==2.5.0a1)
<a lot of package collecting...>
Installing collected packages: idna, pycparser, cffi, asn1crypto, ipaddress, cryptography, pynacl, bcrypt, pyasn1, paramiko, ansible
  Running setup.py install for pycparser ... done
  Running setup.py install for ipaddress ... done
Successfully installed ansible-2.5.0a1 asn1crypto-0.24.0 bcrypt-3.1.4 cffi-1.11.4 cryptography-2.1.4 idna-2.6 ipaddress-1.0.19 paramiko-2.4.0 pyasn1-0.4.2 pycparser-2.18 pynacl-1.2.1

好的,已安装,但是让我们尝试导入它:

C:\Users\jotd>c:\python27\python
Python 2.7.12 (v2.7.12:d33e0cf91556, Jun 27 2016, 15:24:40) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import ansible
>>>

作品!好极了!