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

时间:2011-08-10 03:35:03

标签: 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)无论我使用何种系统,如何确定安装了铁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)

3 个答案:

答案 0 :(得分:2)

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

上查看我之前的回答

答案 1 :(得分:1)

这有点麻烦但是,鉴于Ironpython的LIB目录安装在64位系统的x86程序文件文件夹下以及32位系统上的常用程序文件路径上,你可以这样做:

import sys
import System
if System.IntPtr.Size * 8 == 32: # detect if we are running on 32bit process
    sys.path.append(System.Environment.GetEnvironmentVariable("ProgramFiles") + "\IronPython 2.7\Lib")
else:
    sys.path.append(System.Environment.GetEnvironmentVariable("ProgramFiles(x86)") + "\IronPython 2.7\Lib")

import os # it works !!

在这里,我们使用%ProgramFiles%%ProgramFiles(x86)%来确定安装IronPython的路径。

引用维基百科关于%ProgramFiles%变量(link):

  

%PROGRAMFILES%

     

此变量指向Program Files目录,该目录存储所有   安装Windows等程序。默认开启   英语系统是C:\ Program Files。在64位版本中   Windows(XP,2003,Vista),也有%ProgramFiles(x86)%   默认为C:\ Program Files(x86)和%ProgramW6432%   到C:\ Program Files。 %ProgramFiles%本身取决于是否   请求环境变量的进程本身是32位或64位   (这是由Windows-on-Windows 64位重定向引起的。)

答案 2 :(得分:1)

这很奇怪,因为如果你运行IronPython安装程序,然后运行C:\Program Files\IronPython 2.7\ipy.exeC:\Program Files (x86)\IronPython 2.7\ipy.exe,你就不需要做任何事情让stdlib可用。

我的猜测是你有多个IronPython并且你运行的是错误的,但只是因为我无法想到会发生这种情况的另一个原因。它应该是Just Work。