如果它的文件夹在另一个应用程序中打开,则无法在 python 中导入我自己的模块

Cannot import my own module in python if its folder is opened in another application

我遇到了一个非常意外的错误,我想知道以前是否有人遇到过这种错误。

我使用的设置如下:macOS 10.14.6 和 Python 3.7 我也在使用 ipython 和 spyder,但它与我的问题无关,因为它也发生在正常 python shell 中。

我有一个名为 FLAP 的模块和几个子模块,它们都依赖于主 FLAP 模块。它们位于名为 git-repos 的同一目录中。我将 git-repos 添加到 spyder 中的 PYTHONPATH(或添加到 python shell 中的 sys.path)。 如果我只有 spyder 的 ipython shell 或者只是 python shell 打开,我可以导入我自己的模块。

一旦我打开 git-repos 文件夹,例如指挥官一号,python 无法导入模块。我还尝试使用 Sourcetree git 客户端,它引发了同样的事情。如果我在指挥官一号应用程序中退出该文件夹,则可以在重新启动 python shell.

后再次导入它

此外,我觉得奇怪的是,它不会发生在 macOS 的 Finder 上,也不会发生在已安装的软件包(如 matplotlib 或 numpy)上。

我认为值得一提的是,整个目录都在 Google Drive Filestream 安装到 /Volumes 中。

你们以前遇到过这种问题吗?

原来你不能在 macOS 中执行以下操作:

  1. 将您的模块目录放在 Google 虚拟云端硬盘中
  2. 在 PYTHONPATH 中有那个目录并且
  3. 打开相同的目录,例如一号指挥官和
  4. 能够在python
  5. 导入模块

您可以执行 3. OR 4. 但不能执行 3. AND 4。如果条件一不成立,那么无论如何您都可以导入模块。

这是 macOS Google Drive 软件中的错误。该文件夹在另一个应用程序(不是 Finder)中打开时似乎被锁定,因此 python shell 找不到它。

最后,我将文件夹从 Google 驱动器移到了我的驱动器上,无论如何我都可以导入它。我启动了一个 crontab 记录,因此它会定期将我的代码备份到驱动器。

我花了三天时间试图找到错误的根源。我认为这可以帮助其他面临这个非常具体问题的人。