2011-01-17 17 views
7

मैं .NET 4.0 में python 2.6 को एम्बेड करने का प्रयास कर रहा हूं।.NET के लिए पायथन: आयात त्रुटि: चेतावनी नामक कोई मॉड्यूल

".NET के लिए अजगर" में बहुत कम प्रलेखन के बाद, मैं एक काफी सरल कोड इस प्रकार लिखा है:

const string pythonModulePath = @"C:\Projects\PythonImport\PythonImport\test.py"; 
Environment.SetEnvironmentVariable("PYTHONHOME", Path.GetDirectoryName(python 
ModulePath)); 

PythonEngine.Initialize(); 

var oldWorkingDirectory = Directory.GetCurrentDirectory(); 
var currWorkingDirectory = Path.GetDirectoryName(pythonModulePath); 

Directory.SetCurrentDirectory(currWorkingDirectory); 

var pyPlugin = PythonEngine.ImportModule(Path.GetFileNameWithoutExtension(python 
ModulePath)); 
if (pyPlugin == null) 
{ 
     throw new PythonException(); 
} 

Directory.SetCurrentDirectory(oldWorkingDirectory); 

यहां तक ​​कि अगर test.py खाली मैं एक आयात त्रुटि कह "नहीं मॉड्यूल नामित मिलता है चेतावनी "।

'import site' failed; use -v for traceback 

Unhandled Exception: Python.Runtime.PythonException: ImportError : No module nam 
ed warnings 

जब आप "python -v" (verbose mode) का उपयोग कर test.py चलाते हैं तो कारण स्पष्ट हो जाता है। ध्यान दें कि पायथन #cleanup [2] चेतावनियां कॉल करता है।

पायथन .NET चेतावनी को हल करने में सक्षम क्यों नहीं है? मॉड्यूल लिब निर्देशिका में मौजूद है।

कोई भी विचार?

उत्तर

2

मुझे लगता है कि डिफ़ॉल्ट रूप से पाइथन इंजन आपके द्वारा स्वचालित रूप से आवश्यक पथ निर्धारित नहीं करता है।

http://www.voidspace.org.uk/ironpython/custom_executable.shtml में लोहेप्थॉन एम्बेड करने के लिए एक उदाहरण है। लगता है कि आपने

PythonEngine engine = new PythonEngine(); 
engine.AddToPath(Path.GetDirectoryName(Application.ExecutablePath)); 
engine.AddToPath(MyPathToStdLib); 

कुछ याद कर रहे हैं की तरह जब तक मैं जानता हूँ कि कहाँ और अगर IronPython स्थापित किया गया है, मैं मानक मॉड्यूल मैं जरूरत के सभी मिल जाए, उन्हें एक IPyStdLibDLL के संकलन और फिर मेरी कोड

से निम्नलिखित वें करना पसंद
import clr 
clr.addReference("IPyStdLib") 
import site 
1

@SilentGhost मैं अगर आप इस पता लगा पता नहीं है, लेकिन आप अपने PYTHONHOME चर अपने PYTHONPATH वातावरण चर के बजाय सेट करना होगा। मुझे भी समस्या थी, पर्यावरण परिवर्तनीय को ol 'Environment.SetVariable ("पायथनपथ", ...) के साथ सेट किया गया और सबकुछ अंत में अच्छी तरह से काम करता था।

Python.NET के साथ शुभकामनाएं।

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