你如何在IronPython中使用标准库?

Dou*_*oug 11 c# python ironpython

我将这个问题加上前缀:不,设置IRONPYTHONPATH不是答案.

无论如何...

我计划使用IronPython作为项目的Powershell的替代品,但在我开始之前我一直都很难过.

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

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

搞砸了我终于发现我可以通过手动添加到路径来使用标准库:

import sys
sys.path.append(r"C:\Program Files\IronPython 2.7\Lib")
import os
Run Code Online (Sandbox Code Playgroud)

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

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

所以,这里有几个问题:

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

2)无论我使用何种系统,如何确定安装铁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)
Run Code Online (Sandbox Code Playgroud)

Wom*_*tPM 2

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