Я задам этот вопрос следующим образом: Нет, настройка 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) Как определить каталог, в котором установлен Iron Python, независимо от того, какую систему я использую? (возможно, установщик IronPython устанавливает переменную?)
Просто записка здесь;да, я видел несколько других постов, в которых говорилось: "установи свой 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)