Przedłużę to pytanie: Nie, Ustawienie IRONPYTHONPATH nie jest odpowiedzią.Jak korzystać ze standardowej biblioteki w IronPython?
Zresztą ...
I planuje przy użyciu IronPython jako zamiennik PowerShell dla projektu, ale byłem zakłopotany przed I już nawet zaczęło.
Pierwszą rzeczą próbowałem zrobić to wykorzystanie os.path, powodując:
Traceback (most recent call last):
File "<string>", line 1, in <module>
ImportError: No module named os
Po aprowizacji w końcu odkrył mogę użyć standardowej biblioteki, dodając je ręcznie do ścieżki:
import sys
sys.path.append(r"C:\Program Files\IronPython 2.7\Lib")
import os
Jest to jednak głupi pomysł. Twarde kodowanie ścieżki do biblioteki Pythona wewnątrz moich skryptów jest 100% gwarancją, że nie będą one działać w pewnym momencie.
Odkryłem to prawie natychmiast, gdy próbowałem użyć skryptu na komputerze z systemem Windows 7, a ścieżka była nieco inna ("Program Files (x86)").
więc kilka pytań tutaj:
1) Dlaczego tak trudno jest korzystać z biblioteki standardowej? Przynajmniej pomyślałbym, że interaktywny monit w VS i podstawowy ipy.exe miałby to.
2) Jak określić katalog, w którym instalowany jest żelazny python, niezależnie od używanego systemu? (Instalator IronPython ustawiający var prawdopodobnie?)
Tu tylko treść; tak, widziałem kilka innych wpisów mówiących "ustaw twoją IRONPYTHONPATH". To nieprzydatne. Jeśli mam pustą maszynę, która oznacza, że muszę:
1) Instalacja IronPython
2) Uruchom jakiś szalony skryptu powershell, aby szukać gdzie-ever-the-cholery średnia biblioteki był zainstalowany i ustawić globalny IRONPYTHONPATH zmienna do niego.
3) Uruchom skrypty python
szukam lepszy sposób.
-
Edit:
Fakt Używam tego zrobić powershell jak rzeczy jest w zasadzie bez znaczenia, ale staram się osiągnąć coś takiego:
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)
Czy możesz pokazać przykładowy scenariusz tego, co chciałbyś zrobić i jak zamierzasz go użyć? Nie jestem pewien, czy rozumiem, jaki jest problem. –
patrz edycja powyżej. Jest to jednak zasadniczo nieistotne dla mojego pytania. – Doug