2012-02-24 1 views
4

을 정식 이름을 변경, 내가라는 __init__.py 파일이 위와 같이로드됩니다. 공유 라이브러리는 Boost Python을 사용하여 C++로 구현됩니다.파이썬하십시오 _foomodule.so가 같은 디렉토리에</p> <pre><code>from _foo import * </code></pre> <p>하는 : 가져 오기 및 내 자신의 창조의 파이썬 패키지 디렉토리에서 현재 모듈에서

import foo 
print foo.MyCppClass 

이 작동하지만 특질과 :

foo._foo.MyCppClass 

그래서 MyCppClass과 같이 존재하는 동안 : 클래스가 그것이 인쇄 만드는 전체 패키지 경로, 파이썬으로 알려진이 나를 말할 수 별칭은 foo이고 foo.MyCppClass은 정규 이름이 아닙니다. 약간 추한 것 이외에, 이것은 또한 비트가 절름발이가되도록합니다 : help(foo)은 foo가 모듈 _foo을 포함하고 있다고 말하고, help(foo._foo)이라고 말하면 MyCppClass에 대한 설명서를 얻을 수 있습니다.

__init__.py에서 다르게 할 수있는 것이 있습니까? 그렇지 않으면 파이썬에서 정규화 된 이름으로 foo.MyCppClass을 볼 수 있습니까?

저는 파이썬 2.7을 사용하고 있습니다. 솔루션이 2.6에서도 작동한다면 좋을 것입니다.

+0

'_foo' 모듈이 파이썬으로 작성 되었다면 클래스의'__module__' 속성을 변경하도록 알려 드리겠습니다 (각 클래스를 정의한 직후에이 작업을 수행하거나 한번에 모두 수행하는 루프를 작성하십시오)하지만 그 속성은 아마도 당신의 C++ 클래스에 쓰기 가능하지 않습니다 ... 어쩌면 부스트에서 그 속성을 변경할 수있는 방법이 있을까요? (절대로 사용하지 마십시오.) – kindall

+0

모듈 이름을 바꿀 수 있다고 생각합니다. 'foo._foo.MyCppClass'에서'foo.bar.MyCppClass'로 이동하고 싶지 않습니다 - 파이썬에서 정규 이름으로'foo.MyCppClass'만으로 끝내고 싶습니다. –

답변

2

나는 동일한 문제가있었습니다. Boost.Python 정의에서 모듈 이름을 변경할 수 있습니다.

BOOST_PYTHON_MODULE(_foo) 
{ 
    scope().attr("__name__") = "foo"; 
    ... 
} 

도움말 문제는 별도의 문제입니다. 도움을 받으려면 __all__에 각 항목을 추가해야한다고 생각합니다. foo.MyCppClass - - 나는이 두 가지 작업을 수행 할 때

foo.MyCppClass의 이름은 단지이며 help(foo)MyCppClass에 대한 문서를 제공합니다.

+0

그냥'__name__ '을 설정하면 나를 위해 해결하는 것 같습니다. 나는'import *'를하는'__init __. py' 파일에서 전적으로 작동하도록하는 방법을 찾아 내려고했지만, 성공하지 못했습니다. C++ 코드를 변경하지 않으려면 Python에서'__name__'을 (를) 설정하는 것이 가능한지 알고 있습니까? 감사! –

1

당신은 당신의 __init__.py 파일에 라인

__all__ = ['MyCppClass'] 

을 추가하여 help() 문제를 해결할 수 있습니다.

+0

흥미로운 점이 있습니다. 감사합니다. 그러나, 나는 여전히 나의 "진짜"문제에 대한 해결책을 찾고있다 ... 고정 도움()은 너무 좋을 것이다. –

관련 문제