我将在这个问题前加上:不,设置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)
答案 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.exe
或C:\Program Files (x86)\IronPython 2.7\ipy.exe
,你就不需要做任何事情让stdlib可用。
我的猜测是你有多个IronPython并且你运行的是错误的,但只是因为我无法想到会发生这种情况的另一个原因。它应该是Just Work。