2011-01-17 29 views
7

Tôi đang cố gắng nhúng python 2.6 trong .NET 4.0.Python cho .NET: ImportError: Không có mô-đun có tên cảnh báo

Tiếp theo tài liệu hướng dẫn rất tối thiểu trong "Python cho NET", tôi đã viết một mã khá đơn giản như sau:

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); 

Thậm chí nếu test.py rỗng Tôi nhận được một lỗi nhập khẩu nói "Không có mô-đun tên cảnh báo ".

'import site' failed; use -v for traceback 

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

Lý do trở nên rõ ràng khi bạn chạy test.py sử dụng "python -v" (chế độ tiết). Chú ý rằng python gọi cảnh báo #cleanup [2].

Tại sao Python .NET không thể giải quyết cảnh báo? Mô-đun có trong thư mục Lib.

Bất kỳ ý tưởng nào?

Trả lời

2

Tôi nghĩ theo mặc định, Công cụ Python không đặt đường dẫn bạn cần tự động.

http://www.voidspace.org.uk/ironpython/custom_executable.shtml có ví dụ về nhúng ironpython. Hình như bạn đang thiếu một cái gì đó giống như

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

Trừ khi tôi biết ở đâu và nếu IronPython được cài đặt, tôi thích để tìm tất cả các module chuẩn mà tôi cần, biên dịch chúng vào một IPyStdLibDLL và sau đó làm thứ sau đây từ mã của tôi

import clr 
clr.addReference("IPyStdLib") 
import site 
1

@SilentGhost Tôi không biết nếu bạn đã tìm ra điều này, nhưng bạn cần đặt biến môi trường PYTHONPATH thay vì biến PYTHONHOME của bạn. Tôi cũng vậy, đã có vấn đề, thiết lập biến môi trường với ol 'Environment.SetVariable ("PYTHONPATH", ...) và mọi thứ hoạt động tốt ở cuối.

Chúc may mắn với Python.NET.

Các vấn đề liên quan