c# - 你如何使用 IronPython 中的标准库?

标签 c# python ironpython

我会在这个问题前加前缀:不,设置 IRONPYTHONPATH 不是答案。

无论如何...

我计划在一个项目中使用 IronPython 替代 Powershell,但我还没开始就被难住了。

我尝试做的第一件事是使用 os.path,导致:

Traceback (most recent call last):
  File "<string>", line 1, in <module>
ImportError: No module named os

经过一番折腾,我终于发现我可以通过手动将标准库添加到路径中来使用它:

import sys
sys.path.append(r"C:\Program Files\IronPython 2.7\Lib")
import os

然而,这是一个愚蠢的想法。在我的脚本中硬编码 python 库的路径是 100% 保证它们在某些时候不起作用的方法。

当我尝试在 Windows 7 机器上使用该脚本并且路径略有不同(“Program Files (x86)”)时,我几乎立即发现了这一点。

所以,这里有几个问题:

1) 为什么标准库这么难用? 至少我会想到VS和基本ipy.exe中的交互提示会有这个。

2) 无论我使用的系统如何,我如何确定 iron python 的安装目录?(IronPython 安装程序可能设置了一个 var?)

这里只是一个注释;是的,我看到其他一些帖子说“设置你的 IRONPYTHONPATH”。这于事无补。如果我有一台空白机器,这意味着我必须:

1) 安装IronPython

2) 运行一些疯狂的 powershell 脚本来搜索标准库的安装位置,并为其设置一个全局 IRONPYTHONPATH 变量。

3) 运行 python 脚本

我正在寻找更好的方法。

--

编辑:

我正在使用它来做 powershell 之类的事情基本上是无关紧要的,但我正在努力实现类似的目标:

import clr
from System.Management.Automation import RunspaceInvoke
import os

scriptRoot = os.getcwd()
runSpace = RunspaceInvoke()
cmdPath64 = os.join(scriptRoot, "..\java\...")
cmdPath32 = os.join(scriptRoot, "..\java\...")
proc = runSpace.Invoke("Get-WmiObject Win32_Processor ... ")
if proc.AddressWidth == 32:
  runSpace.Invoke(cmdPath32)
else:
  runSpace.Invoke(cmdPath64)

最佳答案

我发现,为了确保一切都适用于非开发第三方,通常最好使用 pyc.py 来创建 DLL 和可执行文件。我经常创建 python 标准模块的 DLL 并在代码中引用它。请参阅我之前对此问题的回答 IronPython: EXE compiled using pyc.py cannot import module "os"

关于c# - 你如何使用 IronPython 中的标准库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7005597/

相关文章:

c# - 如何在 c# 中制作一个 xml 文件以与作为数据表导入的 .iqy 一起使用

c# - 使用左连接的 LINQ orderby FK

c# - 如何将字符串中的整数视为多位数字而不是单个数字?

c# - NotSupportedException 与 linq 查询和 groupBy

python - 如何防止 tensorflow 分配整个 GPU 内存?

python - 类型错误 : slice indices must be integers or None or have an __index__ method (Book example not working)

python - 摆脱背景条纹(Python、OpenCV)

c# - 无法在 Visual Studio 中使用 IronPython 运行带有库的 python 脚本

ironpython - 如何在 Spotfire 中使用 IronPython 获取列的外部名称?

.net - 有没有人设法使用 Iron Python 安装 Python 模块?