Я задам этот вопрос следующим образом: Нет, настройка 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% способ заставить их не работать в какой-то момент.
Я обнаружил это почти сразу, когда я попытался использовать script на машине Windows 7, и путь был несколько иным ( "Program Files (x86)" ).
Итак, пара вопросов здесь:
1) Почему так сложно использовать стандартную библиотеку?. По крайней мере, я бы подумал, что интерактивное приглашение в VS и базовый ipy.exe будет иметь это.
2) Как определить каталог, в котором установлен железо python, независимо от используемой системы? (установщик IronPython, устанавливающий var, возможно?)
Просто заметьте здесь; да, я видел несколько других сообщений, в которых говорилось: "установите IRONPYTHONPATH". Это бесполезно. Если у меня есть пустая машина, это означает, что я должен:
1) Установите IronPython
2) Запустите несколько сумасшедших powershell script, чтобы найти, где была установлена стандартная библиотека, и установить для нее глобальную переменную 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)