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