how to fix the pip install failures on windows with below error. Getting this error while trying to install ansible.
I suspect it is with issue with selected pip package for install. but the same is working fine with Linux based systems. Will there be any difference with OS for pip install
Exception: Traceback (most recent call last): File "c:python27libsite-packagespipbasecommand.py", line 215, in main status = self.run(options, args) File "c:python27libsite-packagespipcommandsinstall.py", line 324, in run requirement_set.prepare_files(finder) File "c:python27libsite-packagespipreqreq_set.py", line 380, in prepare_files ignore_dependencies=self.ignore_dependencies)) File "c:python27libsite-packagespipreqreq_set.py", line 620, in _prepare_file session=self.session, hashes=hashes) File "c:python27libsite-packagespipdownload.py", line 821, in unpack_url hashes=hashes File "c:python27libsite-packagespipdownload.py", line 663, in unpack_http_url unpack_file(from_path, location, content_type, link) File "c:python27libsite-packagespiputils__init__.py", line 605, in unpack_file untar_file(filename, location) File "c:python27libsite-packagespiputils__init__.py", line 553, in untar_file ensure_dir(path) File "c:python27libsite-packagespiputils__init__.py", line 83, in ensure_dir os.makedirs(path) File "C:Python27Libos.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/'
Advertisement
Answer
Well, it seems to be a known bug:
https://github.com/ansible/ansible/issues/31419
In Ansible 2.4.0, the module copy use symbolic links in the tests suite: https://github.com/ansible/ansible/tree/devel/test/integration/targets/copy/files/subdir/subdir1
circles -> ../ subdir3 -> ../subdir2/subdir3
Windows 10, cannot create this directories tree because the path is too long. In fact the resolved path is:
test/integration/targets/copy/files/subdir/subdir1/circles/subdir1/circles/subdir1/circles/subdir1/circles/subdir1/circles/subdir1/circles/subdir1/circles/subdir1/circles/subdir2/subdir3/
bug report ends with:
We do not support installing ansible directly on a windows machine. You will need a linux like operating system to install ansible on
Workaround
A possible workaround is to download the wheel on pypi, it doesn’t depend on Linux or whatever, probably pure python:
https://pypi.python.org/pypi/ansible/2.5.0a
(the pip install ansible
command downloads the “source” .tgz archive, performs tests, … and the path issue is within the tests, so let’s use a ready-to-use pre-built bundle)
Once downloaded, use pip install path/to/the/wheel/file.whl
Tested and installed successfully on my Windows 10 machine:
C:Usersjotd>c:Python27Scriptspip install C:UsersjotdDownloadsansible-2.5.0a1-py2-none-any.whl Processing c:usersjotddownloadsansible-2.5.0a1-py2-none-any.whl Requirement already satisfied: PyYAML in c:python27libsite-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
ok, installed, but let’s try to import it:
C:Usersjotd>c:python27python 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 >>>
works! yay!