4

에 대한 수입 오류가 내가 가진 파이썬 파일이 내용 등 :는 C# 응용 프로그램에서 IronPython을 포함하기 - URLLIB

engine = Python.CreateEngine(); 

ScriptSource source = engine.CreateScriptSourceFromFile("test.py"); 
ScriptScope scope = engine.CreateScope(); 
ObjectOperations op = engine.Operations; 

source.Execute(scope); // class object created 

object klaz = scope.GetVariable("A"); // get the class object 
object instance = op.Call(klaz, "blabla waarde"); // create the instance 
object method = op.GetMember(instance, "getVal"); // get a method 

string result = (string)op.Call(method); // call method and get result (9) 
Console.WriteLine("Result: " + result); //output: 'Result: blabla waarde' 

:

import re 
import urllib 

class A(object): 
    def __init__(self, x): 
     self.x = x 

    def getVal(self): 
     return self.x 

    def __str__(self): 
     return "instance of A with value '%s'" % (self.getVal()) 

가 나는 또한 다음 코드를 사용하여 간단한 C# 콘솔 프로젝트가 (나는 이것을 this stackoverflow querstion and answer에서 얻었습니다.)
파이썬 파일에있는 import urllib 문을 생략하면 모든 것이 잘 동작합니다.
를 (그것이 re 모듈을 찾아 의미)하지만 곧 내가 추가 중 하나로 import urllib 또는 import urllib2 나는 다음과 같은 예외가 얻을 : 그래서 어떻게 든

ImportException was unhandled 
No module named urllib 

는 URLLIB를 찾을 수 있습니다. IronPython lib 폴더를 확인하고 urllib와 urllib 2가 모두 존재합니다. C# 코드에서 urllib를 가져 오면 동일한 예외가 발생합니다. (engine.ImportModule("urllib");)

어떤 아이디어가?
파이썬 코드에서 가져 오기를 관리하고 C# 코드에서 가져 오기를 관리하고 싶습니다.
(그래서 같은 물건을 피하기 위해 싶습니다 engine.ImportModule("urllib");)

편집 : 실제로 (아마도 누군가가 대안이있다)이 사용하려고하고있어 일부 추가 정보 :
I 주요 C# 응용 프로그램이 있고 파이썬 스크립트는 기본 응용 프로그램의 확장 또는 플러그인으로 사용됩니다.
저는 플러그인을 컴파일 할 필요가 없도록 Python을 사용하고 있습니다.

답변

1

나는 같은 문제에 직면 해있다. 코멘트에 "Tom E 's"제안에 따라 fuzzyman의 회신을 통해 문제를 성공적으로 해결할 수있었습니다. 문제는 urllib.py의 위치를 ​​해결할 수없는 것 같습니다. 우리는 그것을 설정해야합니다.

당신은 질문과 답변 다음 link를 확인할 수 있습니다.

+0

(매우 늦은) 당신의 대답을 받아 들여서 미안 하구나, 나는 그 질문을 다시 보지 않았다. 완벽하게 작동합니다. –

0

가져올 CPython 버전은 IronPython 버전과 일치해야합니다. IronPython 2.0에는 CPython v2.5를 사용하고, IronPython 2.6에는 v2.6을 사용하십시오.

이 시도 : 나는 '해방'이 실제로 ipy.exe 내부에서 수행되는 대화 형 콘솔에서의 sys.path에있는 것으로 생각

import sys 
sys.path.append(r'\c:\python26\lib') # adjust to whatever version of CPython you have installed. 
import urllib 
+0

IronPython lib 폴더에서 가져 오기를 시도한다는 가정하에있었습니다. 어쨌든 버전이 (2.6)과 일치하고 코드를 추가하면 구문 예외가 발생합니다. (Visual Studio의 C# 코드를 통해 실행하는 경우) 명령 프롬프트에서 직접 실행하면 스크립트가 정상적으로 실행됩니다. (IronPython과 CPython 모두) –

+0

흥미 롭습니다. 대화식이 아닌 스크립트에서 os.environ.get ('PYTHONPATH')를 평가할 때 무엇을 얻습니까? –

+0

'import os'는 urllib과 같은 예외를 던집니다. 그래서 나는 그 질문에 답할 수 없습니다 :). 대화 형으로 (IronPython과 CPython 둘 다) 그것은 None을 반환합니다. 편집 : sys를 인쇄 할 때 fuzzyman이 올바른 경로에있을 수도 있습니다.경로'스크립트에서 나는 오직'[ '.', 'C : \\ DATA \\ My Dropbox \\ Projects \\ C# \\ IronPython 참조 \\ DynamicTest \\ Dy namicTest \\ bin \\ Debug \\ Lib ']'올바른 lib 경로를로드하는 올바른 함수를 찾아야합니다. –

4

- 당신이 수동으로 경로를 추가해야합니다 삽입 할 때. 엔진 또는 런타임에는이를 수행 할 수있는 'SetSourcePaths'(또는 유사한) 메소드가 있습니다.

+0

이것이 문제인 것처럼 보입니다. sys.path에는 '['. ','C : \\ DATA \\ My Dropbox \\ Projects \\ C# \\ IronPython 참조 \\ DynamicTest \\ Dy namicTest \\ bin \\ Debug \\ Lib '] 만 포함됩니다. '(내 프로젝트의 위치). 올바른 라이브러리 경로를 추가하려면 올바른 함수를 찾아야합니다. 그러나 그것은 내일 동안 일 것이다. 이것은 또한이 프로그램의 사용자가 IronPython을 설치해야한다는 의미일까요? 나는 C# 응용 프로그램이 컴파일되고 IronPython DLL 파일이 포함될 때 프로그램을 실행할 수 있기를 바랬습니다. (IronPython 라이브러리도 추가하지 않은 경우) –

+0

IronPython Lib 폴더의 내용을 sys.path의 위치에 복사 했으므로 이제는 구문 예외 (잘못된 구문)가 발생합니다. 'source.Execute (scope);':/ –

+1

표준 라이브러리 모듈을 사용하려면 표준 라이브러리 (.py 파일)가 필요합니다. 그렇다고해서 사용자가 IronPython을 설치해야한다는 의미는 아니지만 응용 프로그램에서 사용하는 표준 라이브러리의 일부만 제공해야합니다 (최소). 구문 오류가 발생하는 이유를 모르겠다 - 잘못된 구문을 사용하는 것 외에는 예외가 있습니다 ... 예외에 더 많은 정보가 있습니까? ipy.exe에서 동일한 코드가 실행됩니까? – fuzzyman

관련 문제