我正在尝试从 github 下载代码,其中包含库“ee” - Google Earth Engine。 GitBash 给我一个错误:
ModuleNotFoundError: No module named 'fcntl'
fcntl
是 Google Earth Engine 库中的一个模块。我有Windows,看来需要Linux。我被指示将模块 (fcntl) 添加到 PYTHONPATH。针对此错误的任何其他建议也会有所帮助!我打算在 PYTHONPATH 中添加的代码如下。
def fcntl(fd, op, arg=0):
return 0
def ioctl(fd, op, arg=0, mutable_flag=True):
if mutable_flag:
return 0
else:
return ""
def flock(fd, op):
return
def lockf(fd, operation, length=0, start=0, whence=0):
return
首先,这可能不适合你。
仅通过向 Python 库添加模块无法将 Windows 转变为 Linux。您的路径上没有
fcntl
模块的原因是 Windows 中不包含 fcntl
。它不包含在 Windows 上的原因是 Windows 操作系统不支持模块包装的系统调用,或任何足够接近以合理模拟这些系统调用的东西。
如果您有需要
fcntl
的代码,则该代码无法在 Windows 上运行(除非您首先做一些重要工作将其移植为不需要 fcntl
)。
如果您的代码不需要需要
fcntl
但仍然使用它,或者如果您只是需要一些临时开发目的的东西,以便您可以在将代码移植到不需要fcntl
的同时捕获并修复文件共享错误,那么你可以使用 msoliman 的虚拟代码,我将在下面解释如何操作。但你似乎期待它能发挥魔法,但它不会这么做。
你可能不确定。也许您正在使用的代码使用其他代码,而其他代码在某些情况下使用
fcntl
,但在其他情况下则不然,它实际上可能不需要 fcntl
来完成您实际尝试用它做的任何事情。
如果你想测试一下,你可以使用 msoliman 的虚拟代码,并将每个函数体更改为:
raise RuntimeError('Oops, using fcntl!')
然后运行该程序并查看它是否因该错误而失败。如果没有,那么您实际上根本不需要
fcntl
。 (或者至少您测试的任何事情都不需要它 - 总是有可能您需要对应用程序执行一些您不认为要测试的其他事情需要它。)
如果您的代码实际上需要
fcntl
,并且您不想/无法将该代码移植到使用 Win32 API 调用的 Windows 代码(或像 portalocker
这样的跨平台库),那么您可能需要什么要做的就是安装 Linux 并在那里运行程序。
有多种方法可以在 Windows 之上运行 Linux,而不是代替 Windows。例如,您可以安装Docker for Windows,然后使用该应用程序构建一个 Linux Docker 容器。或者,您可以使用 VMWare Player 实际上将 Linux 映像作为 Windows 下的应用程序运行,然后在该映像中执行您的工作。等等。
最后,msoliman 的“将此模块放入您的 PYTHONPATH”有点误导。
sys.path
中。 PYTHONPATH
只是一种方法,可能不是您想要的方法。
选项有:
path[0]
是包含用于调用 Python 解释器的脚本的目录。”sys.path
。您可以 import sys; print(sys.path)
获取这些目录的列表。如果您在主目录中看到某些内容,那么这是放置它的好地方;如果没有,请查找名称中带有 site-packages
的内容。PYTHONPATH
环境变量设置为目录的完整路径。您可以通过编写 cmd
在 Windows SET PYTHONPATH C:\Path\To\Directory
命令提示符中设置环境变量。这只会持续到当前命令提示符窗口。如果你想永久设置它,控制面板中有一个设置(它随每个 Windows 版本而变化;超级用户应该为每个版本提供良好的最新答案),你可以在其中设置系统和用户环境变量。从现在开始,任何用户环境变量都将在您打开的每个新命令提示符窗口中生效。我也遇到了同样的问题。 我通过 pip install ee 安装了 Google Earth Engine。 然后我发现你需要运行这个:
pip install earthengine-api --upgrade