【问题标题】:"No module named fcntl" when py script run from c# but works from windows command line“没有名为 fcntl 的模块”当 py 脚本从 c# 运行但从 Windows 命令行运行时
【发布时间】:2010-10-26 19:15:17
【问题描述】:

我正在调用一个使用 imaplib.py 的 python 脚本并得到“没有名为 fcntl 的模块”错误。通过搜索,我发现这个模块仅在 unix 中可用,所以我想知道 py 脚本是否对它在什么操作系统下运行感到困惑。同样,脚本在直接从 python 目录运行的 windows 下运行良好。

    var engine = Python.CreateEngine();
    ScriptScope scope = engine.CreateScope();
    var ops = engine.Operations;
    var script = engine.CreateScriptSourceFromFile("PyTest.py");
    CompiledCode code = script.Compile();

    //string scode = script.GetCode();
    code.Execute(scope);

以及触发它的最小 py 脚本。请注意,注释掉 import imaplib.py 行将停止错误。

import sys
sys.path = ["Python\Lib"]
sys.platform = ["win32"]

import os
import os
import getopt
import getpass
import time
import imaplib

我将它追溯到 imaplib.py 使用的 subprocess.py,在那里我注意到 sys.platform 变量并尝试将其设置为 win32,但没有任何区别。 Ironpython 调用环境和 cpython 文件夹中的 windows 命令提示符之间有些不同。

【问题讨论】:

  • 那么,在运行 IronPython 时,各种 stdlib 模块的不同可用性问题是否令人困惑?

标签: c# .net python ironpython


【解决方案1】:

首先,您将sys.platform 设置为一个列表,它应该是一个字符串。 .NET/CLI 是与 Win32 不同的平台,因此仅设置 sys.platform 无济于事。

一些谷歌搜索表明 IronPython 不支持 subprocess 模块(或者该模块不支持 IronPython)。这里有部分替换:http://www.ironpython.info/index.php?title=The_subprocess_module

这里还有一个带有一些讨论的错误报告:http://bugs.python.org/issue8110

【讨论】:

    【解决方案2】:

    Microsoft 发行版默认不加载标准库。

    您必须在代码中设置路径才能访问它。

    最简单的方法是创建一个名为“IRONPYTHONPATH”的环境变量,其中包含 IronPython 安装的 Lib 文件夹的路径。

    创建后,您可以按如下方式读取位置:

    from System import Environment
    pythonPath = Environment.GetEnvironmentVariable("IRONPYTHONPATH")
    import sys
    sys.path.append(pythonPath)
    

    更多细节在这里。 http://www.ironpython.info/index.php/Using_the_Python_Standard_Library

    【讨论】:

      猜你喜欢
      • 2019-07-31
      • 2023-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多