如何将模块添加到我的 PYTHONPATH 中?

How do you I add a module into my 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

首先,这可能不适合你。

您不能仅通过将模块添加到 Python 库来将 Windows 变为 Linux。您的路径中没有 fcntl 模块的原因是 fcntl 未包含在 Windows 中。它未包含在 Windows 中的原因是 Windows OS 不支持模块包装的系统调用,或任何足够接近以合理模拟这些系统调用的东西。

如果您的代码需要 fcntl,则该代码不能在 Windows 上 运行(除非您做了一些重要的工作将其移植到不需要 fcntl第一名)。


如果您的代码 不需要 fcntl 但无论如何都会使用它,或者如果您只是需要一些临时开发目的的东西,以便您可以捕获并修复将代码移植到不需要 fcntl 时出现文件共享错误,那么您可以使用 msoliman 的虚拟代码,我将在下面解释如何操作。但你似乎期望它会变魔术,但它不会那样做。

你可能不确定。也许您使用的代码使用其他代码,而其他代码使用其他代码,在某些情况下使用 fcntl 而不是其他情况,它实际上可能不需要 fcntl 来执行您实际尝试的任何事情做它。

如果你想测试它,你可以使用 msoliman 的虚拟代码,并将每个函数体更改为:

raise RuntimeError('Oops, using fcntl!')

然后 运行 程序,看看它是否因该错误而失败。如果不是,那么您实际上并不需要 fcntl。 (或者至少您测试的任何东西都不需要它——您需要用应用程序做一些您认为不需要测试的其他事情总是可能需要它。)


如果您的代码确实需要 fcntl,并且您不希望 to/can 将该代码移植到 Windows 使用 Win32 API 调用的代码(或像 portalocker) 这样的跨平台库,那么您可能需要做的就是安装 Linux 和 运行 程序。

有多种方法可以在 Windows 之上 运行 Linux,而不是代替 Windows。例如,您可以将 Docker for Windows and then build a linux docker container with the app. Or you could use VMWare Player 安装到实际上 运行 一个 Linux 图像作为 Windows 下的一个应用程序,然后在该图像中进行您的工作。等等。


最后,msoliman 的 "Place this module in your PYTHONPATH" 有点误导。

您真正需要做的是将其放入您的 sys.path. PYTHONPATH 中,这只是一种方法,可能不是您想要的方法。

选项是:

  1. 只要把它和你的脚本放在同一个目录下即可。正如文档所说,"As initialized upon program startup, the first item of this list, path[0], is the directory containing the script that was used to invoke the Python interpreter."
  2. 将它放在您的用户或系统站点包中,或者其他已经在您的默认目录中的目录 sys.path。您可以 import sys; print(sys.path) 获取这些目录的列表。如果您在主目录中看到一些东西,那是放置它的好地方;如果没有,请查找名称中带有 site-packages 的内容。
  3. 将其放在其他目录中,并将 PYTHONPATH 环境变量设置为目录的完整路径。您可以在 Windows cmd 命令提示符中通过编写 SET PYTHONPATH C:\Path\To\Directory 来设置环境变量。只要当前命令提示符 window,这只会持续存在。如果你想永久设置它,在控制面板的某处有一个设置(它随着每个 Windows 版本而改变;超级用户应该对每个版本都有很好的最新答案),你可以在其中设置系统和用户环境变量。从现在开始,任何用户环境变量将在您打开的每个新命令提示符中生效。window。