Python安装禁用路径长度限制的优缺点?

139

最近我安装了Python 3.7,在安装结束时,有一个选项是“禁用路径长度限制”,但我不知道是否应该这样做。

这样做的利弊是什么?仅从名称上看,似乎应该总是将其禁用。

4个回答

96

我建议选择该选项,从而去除路径长度限制。这可能会在将来节省您调试可避免问题的时间。

以下是我如何了解此事的轶事:

在编译我的程序(Windows机器上的C#代码)期间,我开始收到以下错误:

error MSB3541: Files has invalid value "long\path\filename". The specified path,
  file name, or both are too long. The fully qualified file name must be less than
  260 characters, and the directory name must be less than 248 characters.

这个错误导致我无法构建项目,唯一显而易见的解决方案是缩短路径/文件名。结果证明,这个 bug 是 NTFS(Windows 文件系统)中内置的限制:为什么 Windows 中存在 260 个字符的路径长度限制? 在 NTFS 文件系统内置了几十年的限制之后,Windows 10(Unix 基础系统没有该限制)最终修复了它 (https://learn.microsoft.com/en-us/windows/desktop/FileIO/naming-a-file#maximum-path-length-limitation),但并不会自动启用,需要注册表(或组策略)设置才能实现。Python 选项允许你禁用它以针对 Python 库,节省很多麻烦。 请注意,启用此选项将: a) 在使用长文件/目录名和路径时,在使用旧版 Windows 10 和更低版本的系统上破坏程序的兼容性; b) 在未启用此选项的 Windows 10 机器上,在使用长文件/目录名和路径时破坏程序。

13
我不太清楚你推荐的选项是哪个。我应该启用“禁用路径长度限制”选项,还是不要禁用限制并保持其处于活动状态? - Justin
14
这个问题要求列举优缺点。在了解代码将用于何种环境之前,我应该谨慎地给出建议。在生产环境中,为了跨平台兼容性最好仍然禁用它。如果你遇到路径长度问题,你可以随时在代码中缩短长路径。@Justin,希望我的回答更清晰了。 - khan
对于这个回答,我也感到困惑,因为OP询问的是Python安装程序,但只是简要提到了Python。我安装Python的主要原因是在新电脑上安装AWS CLI安装程序。我主要是想知道AWS CLI是否非常重要。 - Zack
2
就此而言,自2016年起,消除最大限制的能力已经存在(基于“选择加入”的方式)。如果您以前曾因最大限制而遇到问题(如khan所遇),则知道这可能是一个非常恶劣的情况。对于大多数用户,我建议现在是时候向未来迈进,并选择加入以消除最大限制。 - Cato Minor
10
这个问题是关于禁用文件长度限制,你的回答开头提到了“启用”,而你的评论中提到“保持禁用”,但似乎你所说的“禁用”指的是“禁用限制设置/撤销平台兼容性”,而不是“文件长度限制”。这就是Justin感到困惑的原因。 - Mark S.
我使用conda安装了Python。我该怎么解决这个问题?为什么涉及Python的所有事情都像需要火箭科学知识一样不可预测?这真是太令人沮丧了。 - Arrow_Raider

11

回答你的两个问题:

应该禁用它吗?

简单来说,这并不那么重要,因为这只在处理超过260个字符的路径时才有影响,而大多数人并不会这样做。

禁用路径长度限制的利弊是什么?

优点

  • 当使用超过260个字符的文件路径时,您将不会遇到错误,因此就不必担心路径长度了
  • 可以使调试变得更加容易

缺点

  • 禁用它没有负面技术效果
  • 如果您在团队中工作,则可能会引入一些错误,因为在您的电脑上路径限制被禁用,但在其他团队成员的电脑上却没有禁用。
  • 禁用它可能会产生负面的人为行为效应。启用长路径可能会促使团队中使用不好的命名行为,涉及路径名和文件夹结构。限制可以迫使人们缩短他们的路径。

例如,我曾经在具有以下路径的团队中工作,如果允许它们使用更长的名称,则会导致文件路径变得不太可读:

c:/project_name/unity/files/assets/UI/UI_2.0/levelname/season2_levelname/release_season2_levelname_ui_2/PROJECT_S2_MENU_UI/PROJECT_S2_hover_button_shadow_ui/PROJECT_S2_hover_button_shadow_ui_blue/PROJECT_S2_hover_button_shadow_ui_blue.asset

说明

要理解优缺点,有助于了解路径长度限制是什么。

Windows路径长度

您可能已经知道,Windows路径是一个字符串,表示在哪里找到文件或文件夹。

例如:C:\Program Files\7-Zip

更长的文件夹或文件名会导致更长的字符串。

例如:C:\Program Files\Microsoft Update Health Tools

更多的文件夹位于其他文件夹中也会导致更长的字符串

例如:C:\Program Files\Microsoft Update Health Tools\Logs

文件路径长度错误

如果您有许多嵌套在一起的文件夹,名称又很长,那么在尝试在代码中使用此路径时,可能会遇到错误。

这是因为Windows有一种路径长度限制。 Windows 10中的更新允许您禁用此限制。但它默认情况下并不这样做。

禁用此限制可以使计算机在没有错误的情况下使用更长的路径。

为什么会发生这种情况?

旧的Windows API承诺,如果您正确编写了应用程序,它将在未来继续运行。

如果Windows允许文件名长于260个字符,则您现有的应用程序(使用windows API正确)将会失败。

微软确实创建了一种使用完整的32,768个路径名的方法; 但是他们必须创建一个新的API合同才能做到这一点。这是Windows 10的更新。

阅读更多关于为什么要这样做。


3
我会简单明了地讲解。

"禁用路径长度限制"选项是指Windows可以处理的文件路径的最大长度。禁用此限制可以允许更长的文件路径,这对于处理名称非常长或存储在深层目录中的文件非常有用。但是,它也可能会导致与某些程序的兼容性问题,特别是那些可能不支持长文件路径的旧程序。

一般来说,除非您有特定需要,否则通常不必禁用路径长度限制。如果您不确定是否需要它,请将其保持启用状态。


2
通常情况下,禁用路径长度限制并不是一个好主意,特别是当你有可能因为禁用它而导致程序崩溃时。我有很多旧程序,如果我忘记了我已经禁用了它,再重新启用它(找到如何启用它的方法),以及这样做可能会破坏使用长文件路径的脚本的任何程序,这使得关闭它没有帮助,甚至可能是浪费时间和调试成本。
但是,为了捍卫它的存在,在某些环境下,它可能有所帮助,特别是在需要创建多级子文件夹的环境中。特别是在制作具有大量资源的游戏时,这非常有用。但同样地,有许多缩短子文件夹(和文件)的方法,这通常会更容易键入路径,如果你不是到处复制和粘贴的话。(例如,C:\ my_game \ assts \ 01 \ plyr \ walk_01.pngC:\ my_epic_game_featuring_my_awesome_character \ assets \…更容易输入)
如果你有一个虚拟机或其他操作系统可以尝试禁用路径长度限制,而不必担心特定程序因此而崩溃,那么关闭它可能会有用,但对于其他所有情况,请注意它可能会导致更多的错误而不是修复它们。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接