无法找到名为"pubspec.yaml"的文件

73

我创建了一个简单的 Web 应用程序,但当我想运行它时,在"工具输出"中出现了以下信息:

在 "/home/reza/.pubcache/hosted/pub.dartlang.org/browser-0.10.0+2" 中找不到名为 "pubspec.yaml" 的文件。

该如何解决这个问题?

我使用的是 Ubuntu 14.04LTS 64位和 Dart 编辑器 1.7.2。


2
在我的情况下,出现这个问题的原因是我曾经使用 flutter pub get 命令拉取包,但是我用 dart run build_runner ... 命令运行了 build_runner。然而,flutterdart 使用不同的工作目录。因此,请确保使用与您拉取包时相同的命令来运行 build_runner。 - Stacky
以上也是我的问题!为什么不把它做成一个答案呢? - Karolina Hagegård
29个回答

79

这件事情已经发生过好几次了:

对我来说最终解决方法是删除 pub 的缓存(在 OS X 上):

sudo rm -Rf /Users/<username>/.pub-cache

同时,在你项目的根目录下删除 packages 目录:

sudo rm -Rf .packages

然后在你的项目中再次运行 pub get,但是确保你不是以 root 身份操作(使用 whoami 命令可以查看当前用户身份,使用 exit 命令可以退出 root 身份)。


谢谢你的帮助,我在尝试了半个小时后才去尝试SO。你的解决方案有效。我的包文件夹在.packages中,所以我使用sudo rm -Rf .packages来删除它。 - Dom
谢谢。我遇到了一个问题:“在“.pub-cache/hosted/pub.dartlang.org/devtools…”中找不到名为“pubspec.yaml”的文件。”但是在删除“.pub-cache”并执行“pub get”之后,现在一切正常。 - speksy
3
在Windows系统中,我删除了pubspec.lock文件,然后在控制台中输入了"flutter clean"和"flutter pub get"命令。这是在Windows上的操作方法。 - alperefesahin
我在第一个命令中遇到了这个错误:“sudo”不被识别为内部或外部命令,可执行程序或批处理文件。 - Moises Conejo

60
我运行一个简单的`dart run`时遇到了类似的问题:
Could not find a file named "pubspec.yaml" in '/Users/<username>/.pub-cache/hosted/pub.dartlang.org/animated_widgets-1.1.0'

所以我通过以下步骤成功解决了问题:

  • sudo rm -Rf /Users/<用户名>/.pub-cache
  • 在当前项目文件夹中运行flutter clean
  • 最重要的一步是运行dart pub get
  • 运行flutter pub get

最终它终于起作用了。


17
谢谢,dart pub get 帮我解决了问题。 - simodev
1
仍然出现错误:在“/Library/Flutter/.pub-cache/hosted/pub.dartlang.org/device_info_plus-3.1.1”中找不到名为“pubspec.yaml”的文件。 - Justin
3
对我来说,“dart pub get” 也是个问题。 - Jake Boomgaarden
1
删除文件夹很重要。 我尝试从第二步开始,但它没有起作用。 您必须首先删除/Users/<username>/.pub-cache - sharbel okzan
1
感谢您强调dart pub get,这正是我所缺少的。显然,它取决于导致错误的软件包,即在某些情况下,flutter pub get可以解决问题,但有时您还需要执行dart pub get - sharbel okzan

21

运行flutter clean命令,然后运行flutter pub get命令。


18

看起来你的pub cache已经损坏了。你可以尝试在命令行中运行pub cache repair,但我认为如果pubspec.yaml文件丢失,这仍然无法解决问题(有一个关于此问题的开放问题 - 找到它:http://dartbug.com/21418)。请尝试删除文件夹/home/reza/.pubcache/hosted/pub.dartlang.org/browser-0.10.0+2,然后在项目目录或DartEditor中运行pub get


我尝试删除那个文件夹,但当我在reza目录中的终端中输入“ls”时,没有名为“.pubcache”的文件夹。 - Reza
.pub-cache 是怎么样的? - Günter Zöchbauer
没有 .pub-cache 文件夹。 - Reza
很奇怪。你尝试在项目目录中运行 pub getpub upgrade 了吗? - Günter Zöchbauer
非常奇怪。我认为你应该在http://dartbug.com/new上创建一个错误报告。与`.pub-cache`相关的一些已知问题,但我还没有看到过这样的情况。 - Günter Zöchbauer
我的Dart工作正常,我可以在根目录下找到一个.pub-cache文件夹。 - Eason PI

13

如果您的pubspec.yaml文件引用了其他pubspec文件,则也会发生这种情况。尝试从pubspec.yaml中删除路径,并替换为版本,例如:

flutter_local_notifications:
    path: ../

到这里

flutter_local_notifications: ^4.0.1+1

4

这个解决方案适用于新版本的Flutter。如果你找不到pub缓存,你可以在下面找到它:

C:\Users\[用户名]\AppData\Local\Pub

删除Cache文件夹
运行pub cache repair
运行flutter pub get


在我的情况下,我只需要删除缓存文件夹。谢谢! - João Felipe Santana

3
在我的情况下,这发生在我更新flutter版本后。请cd到当前项目文件夹。
 flutter clean
 flutter pub get

终于成功了:flutter packages pub run build_runner build,太棒了!


2

更新 #1: Flutter 3.0.1

最近在运行 flutter doctor 命令后,遇到了一个非常类似的错误信息:

Command output:

Building flutter tool...
Could not find a file named "pubspec.yaml" in "/opt/flutter/.pub-cache/hosted/pub.dartlang.org/test-1.20.2".
Error: Unable to 'pub upgrade' flutter tool. Retrying in five seconds... (9 tries left)
Could not find a file named "pubspec.yaml" in "/opt/flutter/.pub-cache/hosted/pub.dartlang.org/test-1.20.2".
Error: Unable to 'pub upgrade' flutter tool. Retrying in five seconds... (8 tries left)
^CError: Unable to 'pub upgrade' flutter tool. Retrying in five seconds... (7 tries left)

解决方法:

  1. 以授权用户身份登录
  2. 使用sudo chmod -R g+rwx /opt/flutter将组权限添加到文件夹树中

注意 - 将Flutter升级到3.0后,问题重新出现。这似乎证实了默认的Flutter权限没有尊重所有新文件的组所有权。在修复组权限后,Flutter能够成功完成我的升级到3.0.1。

原始答案:

注意:我的最初错误指向了这个特定的文件夹。

/opt/flutter/bin/cache/pkg/sky_engine
  1. 我使用 touched 命令触碰了 pubspec.yaml 文件,并使用 cat 命令确认文件是否存在。文件已经存在且包含所有的 yaml 类型信息。

  2. 接下来,我通过 ls -ll 命令检查了权限,并发现我的 group 对目标文件夹中的 pubspec.yaml 文件没有正确的权限设置(我的用户账户并不拥有该文件夹,但我的 group 有访问权限)。

  3. 登录授权的用户账户后,我使用命令 sudo chmod -R g+rwx /opt/flutter/bin 更改了 group 的权限,并验证了目标文件夹中文件的权限。

  4. 最后,在项目文件夹中运行 flutter pub get 命令,一切顺利。


2

感谢David的回答,帮助我找到并删除了我的Mac中的pub缓存目录。

sudo rm -Rf /Users/<user-name>/Developer/flutter/.pub-cache

David提到的路径有所变化。


2

对于Windows系统,清理pub缓存可以解决问题。我也使用了Flutter版本管理器。

flutter pub cache clean

然后使用
flutter pub get

如果您也使用 fvm,只需在开头添加即可。


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