我正在尝试从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
答案 0 :(得分:1)
首先,这可能对您不起作用。
仅将模块添加到Python库中就不能将Windows转换为Linux。您的路径上没有fcntl
模块的原因是fcntl
未包含在Windows中。而且Windows上不包含它的原因是Windows操作系统不支持模块包装的syscall,或者不足够接近以合理模拟这些syscall的东西。
如果您有需要fcntl
的代码,则该代码无法在Windows上运行(除非您做了一些重要的工作来将其移植为首先不需要fcntl
)。
如果您的代码不需要不需要fcntl
,但是仍然可以使用它,或者您只是出于临时开发目的而需要,以便在移植时捕获并修复文件共享错误不需要fcntl
的代码,那么您可以使用msoliman的伪代码,我将在下面解释如何做。但是您似乎期望它能够产生魔力,并且不会那样做。
您可能不确定。在某些情况下,也许您正在使用的代码使用了其他代码,而在其他情况下却使用了使用fcntl
的其他代码,那么实际上可能不需要fcntl
来完成您实际尝试执行的任何操作用它做。
如果要测试,可以使用msoliman的伪代码,并将每个函数主体更改为此:
raise RuntimeError('Oops, using fcntl!')
然后运行该程序,查看它是否因该错误而失败。如果不是,那么您实际上根本不需要fcntl
。 (或者至少对于您所测试的任何事情您都不需要它—您总是有可能需要与其他您不想测试的应用程序一起做其他事情。)
如果您的代码实际上需要fcntl
,并且您不想/不能将该代码移植到使用Win32 API调用(或类似portalocker
的跨平台库)的Windows代码中,那么您可能需要做的就是安装Linux并在其中运行程序。
有多种方法可以在Windows而不是Windows之上运行Linux。例如,您可以安装Docker for Windows,然后使用该应用程序构建一个Linux docker容器。或者,您实际上可以使用VMWare Player在Windows下作为应用程序运行Linux映像,然后在该映像中进行工作。依此类推。
最后,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版本的不同而变化;超级用户应为每个版本提供最新的最佳答案),您可以在其中设置系统和用户环境变量。从现在开始打开的每个新命令提示符窗口中,任何用户环境变量都将生效。