【问题标题】:How to overcome - pip install ansible on windows failing with filename or extension too long on windows如何克服 - Windows 上的 pip install ansible 因文件名或扩展名太长而在 Windows 上失败
【发布时间】:2018-07-19 12:44:01
【问题描述】:

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

我怀疑安装选择的 pip 包有问题。但同样适用于基于 Linux 的系统。 pip install 和操作系统有什么区别吗

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/'

【问题讨论】:

  • 符号链接循环可能
  • @wim:也许,除了 Windows 中没有任何符号链接。顺便说一句,上面的路径正好是 256 个字符。
  • 为什么会有不同的斜线 \\ 和 / ?
  • 还请注意,第一部分有反斜杠,而第二部分(循环的部分)有斜杠。奇怪
  • 确切的pip install 命令是什么?你对所有包裹都有同样的问题吗?你试过升级pip 吗?

标签: python windows pip


【解决方案1】:

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

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的操作系统来安装ansible

解决方法

一种可能的解决方法是在 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
>>>

有效!耶!

【讨论】:

  • 如果唯一的问题是路径长度,我仍然认为增加 max_path 可能会有所帮助
  • 感谢您提供 GitHub 链接。我会遵守的。
  • 符号链接循环,我猜到了! “圈子”这个名字是一个暗示。 +1
  • 是的,你是对的。可能是模拟的符号链接。谢谢
  • 如何获得 2.6.0 的轮子文件?卡在这个问题上一段时间了:|
【解决方案2】:

我没有使用 pip 就安装了 ansible,这对我来说似乎很简单。

步骤:

  • https://pypi.org/project/ansible/下载压缩的.tgz档案

  • 右键单击以管理员身份运行打开 7-zip 并解压。

  • 在文件夹中打开一个管理控制台并运行:

    python setup.py 安装

现在 ansible 已安装在 Windows 上。

【讨论】:

  • 解压缩对我不起作用——即使是管理员。我使用 7-zip 先删除存档中的test/integration/targets/copy 目录,然后解压缩然后运行python setup.py install。现在都安装好了。谢谢。
  • 不适用于 2.6.1 版 - 出现错误:无法复制 'lib\ansible\module_utils\ansible_release.py':不存在或不是常规文件
【解决方案3】:

我在 Windows 上安装 ansible 时也遇到了问题。我建议启用 windows ubuntu 子系统,而不是尝试在平台上安装 ansible。

https://tutorials.ubuntu.com/tutorial/tutorial-ubuntu-on-windows

一旦你通过 apt-get 或 pip 执行 install ansible

--

使用 PIP 安装:

确保您首先拥有 python3-disutils:

sudo apt install python3-distutils

然后按照https://pip.pypa.io/en/stable/installing/安装pip

尝试运行 ansible - 如果找不到,则需要将 site-packages 目录添加到 $PATH。

为了避免所有这些安装工作,我建议使用 apt-get。

【讨论】:

  • 不是 apt-get for linux 吗?
  • @Jean-François Fabre 是的。但是如果你安装了 Ubuntu 子系统,那么你可以在子系统中使用 apt-get。
猜你喜欢
  • 1970-01-01
  • 2020-09-22
  • 1970-01-01
  • 2023-03-15
  • 1970-01-01
  • 2015-08-05
  • 2017-04-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多