2011-08-10 14 views
11

मैं इस प्रश्न को उपसर्ग कर दूंगा: नहीं, 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 

हालांकि, यह एक कठिन विचार है। मेरी स्क्रिप्ट के अंदर पायथन लाइब्रेरी के पथ को हार्ड कोडिंग करना किसी बिंदु पर काम नहीं करने का 100% गारंटीकृत तरीका है।

मैंने इसे लगभग तुरंत खोजा जब मैंने विंडोज 7 मशीन पर स्क्रिप्ट का उपयोग करने की कोशिश की और पथ थोड़ा अलग था ('प्रोग्राम फ़ाइलें (x86)')।

तो, सवाल यहां के एक जोड़े:

1) इतना कठिन क्यों मानक पुस्तकालय का उपयोग है? कम से कम मैंने सोचा होगा कि वीएस में इंटरैक्टिव प्रॉम्प्ट और मूल ipy.exe के पास यह होगा।

2) मैं जिस प्रणाली का उपयोग कर रहा हूं उसके बावजूद लोहे की पाइथन स्थापित की गई निर्देशिका को मैं कैसे निर्धारित कर सकता हूं? (आयरनपीथन इंस्टालर शायद एक var सेटिंग?)

बस यहां एक नोट; हां, मैंने कुछ अन्य पदों को देखा है, "अपना इरोनिपिथोन सेट करें"। यह अनुपयोगी में है।

1) स्थापित करें IronPython

2) कुछ पागल powershell स्क्रिप्ट चलाएं जहां-कभी-बिल्ली मानक पुस्तकालय स्थापित किया गया था बाहर खोज करने के लिए और एक वैश्विक सेट: अगर मैं एक खाली मशीन का मतलब है कि मैं करने के लिए है IRONPYTHONPATH इसके लिए चर।

3) रन अजगर स्क्रिप्ट

मैं एक बेहतर तरीका की तलाश में हूँ।

-

संपादित करें:

तथ्य मैं इस चीजों की तरह 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

क्या आप एक उदाहरण स्क्रिप्ट दिखा सकते हैं कि आप क्या करने की कोशिश करेंगे और आप इसका उपयोग कैसे करना चाहते हैं? मुझे यकीन नहीं है कि मैं समझता हूं कि समस्या क्या है। –

+0

ऊपर संपादित देखें। हालांकि यह मेरे प्रश्न के लिए मूल रूप से अप्रासंगिक है। – Doug

उत्तर

2

मुझे लगता है कि यह सुनिश्चित करने के लिए कि सबकुछ गैर-डेवलपर तृतीय पक्षों के लिए काम करता है, आमतौर पर डीएलएल और निष्पादन योग्य बनाने के लिए pyc.py का उपयोग करना बेहतर होता है। मैं नियमित रूप से पाइथन मानक मॉड्यूल का एक डीएलएल बना देता हूं और कोड में संदर्भ देता हूं। इस प्रश्न पर मेरा पिछला उत्तर देखें IronPython: EXE compiled using pyc.py cannot import module "os"

+0

यह मेरे प्रश्न का काफी जवाब नहीं देता है, लेकिन यह _does_ काम करता है, और अब तक का सबसे अच्छा समाधान मैंने पाया है। धन्यवाद! – Doug

1

यह थोड़ा सा कामकाज लेकिन, यह देखते हुए कि 64 बिट सिस्टम में x86 प्रोग्राम फाइल फ़ोल्डर के तहत और 32 बिट सिस्टम पर सामान्य प्रोग्राम फाइल पथ पर लोहेपीथॉन की LIB निर्देशिका स्थापित की गई है, आप इस तरह से कर सकते हैं:

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%

प्रोग्राम फ़ाइलें निर्देशिका, जो Windows और अन्य लोगों के सभी स्थापित कार्यक्रम संग्रहीत करता है करने के लिए यह चर अंक। पर डिफ़ॉल्ट अंग्रेजी भाषा भाषा सी: \ प्रोग्राम फ़ाइलें है। विंडोज़ (एक्सपी, 2003, Vista) के 64-बिट संस्करणों में,% प्रोग्रामफाइल (x86)% भी हैं जो सी: \ प्रोग्राम फ़ाइलें (x86) और% ProgramW6432% पर डिफ़ॉल्ट हैं जो को C: \ Program Files को डिफ़ॉल्ट करता है । % ProgramFiles% स्वयं पर निर्भर करता है कि पर्यावरण चर का अनुरोध करने वाली प्रक्रिया स्वयं 32-बिट या 64-बिट है (यह विंडोज-ऑन-विंडोज 64-बिट पुनर्निर्देशन के कारण होती है)।

+0

मैंने अपनी स्क्रिप्ट को pyc.py का उपयोग करके संकलित किया था लेकिन निष्पादन के दौरान, मुझे यह मिल रहा था: अनचाहे अपवाद: IronPython.Runtime.Exceptions.ImportException: ओएस नामक कोई मॉड्यूल नहीं है। हालांकि, एक बार जब मैंने sys.path.append जोड़ा (सिस्टम.इन्वायरमेंट। गेटइन्वायरवायरवायरबल ("प्रोग्रामफाइल (x86)") + "\ IronPython 2.7 \ Lib") यह काम करता है! – Gezim

1

यह बहुत अजीब है, अगर आप IronPython इंस्टॉलर चला, और फिर चलाने C:\Program Files\IronPython 2.7\ipy.exe या C:\Program Files (x86)\IronPython 2.7\ipy.exe, आप stdlib उपलब्ध के लिए कुछ भी करने की जरूरत नहीं करना चाहिए, क्योंकि।

मेरा अनुमान है कि आपके पास एक से अधिक आयरनपीथन हैं और आप गलत चल रहे हैं, लेकिन केवल इसलिए कि मैं किसी अन्य कारण के बारे में सोच नहीं सकता हूं। यह सिर्फ काम करना चाहिए।

+0

मुझे एक ही समस्या है: यदि मैं एक वीएस 2010 सी # परियोजना से एक स्क्रिप्ट चलाता हूं जिसमें "आयात ओएस" रेखा है, तो मुझे एक ही त्रुटि मिलती है; यह ठीक है अगर मैं मैन्युअल रूप से लिब पथ जोड़ता हूं। परियोजना संदर्भ में IronPython.dll 2.7 है। – digEmAll

+1

अगर यह सिर्फ काम करता है तो मैं इसे टुकड़ों से प्यार करूंगा। :/(और नहीं, मेरे पास लौह अजगर की कई प्रतियां नहीं हैं)। – Doug

संबंधित मुद्दे