我会在这个问题前加前缀:不,设置 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/