如何将模块添加到PYTHONPATH中?

时间:2018-06-27 20:15:51

标签: python git-bash pythonpath

我正在尝试从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

1 个答案:

答案 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只是做到这一点的一种方法,可能不是您想要的一种方法。

这些选项是:

  1. 只需将其与脚本放在同一目录中即可。就像文档所说的那样:“在程序启动时初始化,该列表的第一项path[0]是包含用于调用Python解释器的脚本的目录。”
  2. 将其放入您的用户或系统站点程序包中,或其他默认目录sys.path中的目录中。您可以import sys; print(sys.path)获取这些目录的列表。如果您在主目录中看到某些内容,那是放置它的好地方;如果不是,请寻找名称中带有site-packages的东西。
  3. 将其放在其他目录中,并将PYTHONPATH环境变量设置为目录的完整路径。您可以通过编写cmd在Windows SET PYTHONPATH C:\Path\To\Directory命令提示符下设置环境变量。只要当前的命令提示符窗口,它就将持续存在。如果要永久设置,可以在“控制面板”中的某个位置进行设置(随Windows版本的不同而变化;超级用户应为每个版本提供最新的最佳答案),您可以在其中设置系统和用户环境变量。从现在开始打开的每个新命令提示符窗口中,任何用户环境变量都将生效。