如何使用IronPython中的标准库

本文关键字:标准 何使用 IronPython | 更新日期: 2023-09-27 18:04:54

我将在这个问题的前面加上:No, Setting IRONPYTHONPATH不是答案。

无论如何……

我计划在一个项目中使用IronPython作为Powershell的替代品,但是在我开始之前我就被难住了。

我尝试做的第一件事就是使用os。路径,结果为:

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)

如何使用IronPython中的标准库

我发现为了确保一切都适用于非开发人员第三方,通常最好使用pyc.py来创建DLL和可执行文件。我经常创建python标准模块的DLL并在代码中引用它。参见我之前对这个问题的回答IronPython:使用pyc.py编译的EXE无法导入模块"os"

这有点变通,但是,考虑到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%变量(链接):

% 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位重定向引起的)。

这是非常奇怪的,因为如果您运行IronPython安装程序,然后运行C:'Program Files'IronPython 2.7'ipy.exeC:'Program Files (x86)'IronPython 2.7'ipy.exe,您应该不需要做任何事情来使stdlib可用。

我猜你有不止一个IronPython,而你运行的是错误的,但这只是因为我想不出发生这种情况的其他原因。