개요
저는 과학적인 시뮬레이션을 실행 중이며 결과 데이터를 파이썬으로 처리하려고합니다. 시뮬레이션은 시뮬레이션 작성자가 작성한 프로그램 체인 외부에서 사용되지 않는 사용자 정의 데이터 유형을 생성하므로 불행히도 저에게 제공하는 것이 필요합니다.Python에서 클래스 가져 오기 서브 패키지 요청보다 많은 수의 가져 오기
그들은 나에게 두 개의 파일을 설치하려면 :
- 모든 사용자 기능과 두 개의 데모
- 만
sdds.py
에 헬퍼 기능을 제공sddsdatamodule.so
라는 컴파일 된 모듈을 제공하는 클래스를 정의sdds.py
라는 모듈.
(나는 그들이 너무 얽히게 연결되어있는 두 개의 모듈을 제공하고있어 이상하게 느껴진다. 좋은 코딩 연습처럼 보이지는 않지만 코드를 사용하는 것이 처음부터 다시 작성하는 것보다 낫다.) 나는 그들을 내 경로에 나란히 직접 설치하지 않는 것을 선호합니다. 그들은 같은 회사에서 왔는데 SDDS 형식의 파일을 액세스하고 조작하는 것과 같은 특정 작업을 함께 수행하도록 설계되었습니다.
그래서 나는 그들을 패키지에 넣을 것이라고 생각했습니다. 내 경로에 설치할 수있는 것은 자체적으로 포함되어 있으므로 한 위치에서 모듈을 쉽게 찾고 제거하거나 업그레이드 할 수 있습니다. 그렇다면 크게 파이썬 패키지로 비 Python 솔루션을 숨길 수 있습니다. 우아한 것 같습니다.
세부
실제로 사용하는 패키지는 여기있다 :
불행하게도, 그들은 단지 지금 Windows 및 Mac OS X를 지원합니다. 소스 코드를 컴파일하는 것은 상당히 번거롭고 분명히 Linux/Unix에 대한 중요한 요청이 없습니다. 나는 Mac을 가지고 있기 때문에 고맙게도 이것은 나에게 문제가되지 않는다.
그래서 내 디렉토리 트리는 다음과 같습니다
는SDDSPython/ My toplevel package
__init__.py Designed to only import the SDDS class
sdds.py Defines SDDS class and two demo methods
sddsdatamodule.so Defines sddsdata module used by SDDS class.
내 __init__.py
파일은 말 그대로에만이 포함
from sdds import SDDS
sdds.py
파일은 클래스 정의와 두 개의 데모 정의가 포함되어 있습니다. sdds.py
파일의 유일한 코드는 다음과 같습니다
import sddsdata, sys, time
class SDDS:
(lots of code here)
def demo(output):
(lots of code here)
def demo2(output):
(lots of code here)
그때 dir
를 사용하여, SDDSPython
을 가져 확인할 수 있습니다
>>> import SDDSPython
>>> dir(SDDSPython)
['SDDS', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__', 'sdds', 'sddsdata']
그래서 지금 SDDSPython.SDDS
질문을 통해 SDDS
클래스에 액세스 할 수 있습니다
지구 온난화 SDDSPython.sdds
및 SDDSPython.sddsdata
은 SDDSPython
네임 스페이스에로드됩니까 ??
>>> SDDSPython.sdds
<module 'SDDSPython.sdds' from 'SDDSPython/sdds.pyc'>
>>> SDDSPython.sddsdata
<module 'SDDSPython.sddsdata' from 'SDDSPython/sddsdatamodule.so'>
는 I는
__init__.py
파일 I 특별히
SDDSPython
공간에 적재되는 것을
sdds
및
sddsdata
모듈을 제외하고 생각을 만들어. 무슨 일 이니?
sddsdatamodule.so
파일의 내용으로 인해 이러한 현상이 발생한다고 가정 할 수 있습니까? 하지만 모듈이 부모의 네임 스페이스에 어떻게 영향을 미칠 수 있습니까? 나는 길을 잃고 어디서부터 시작해야할지 모르겠습니다. C 코드를 살펴 보았지만 의심스런 것은 보이지 않습니다. 공평하게 말하면 아마도 의심스러운 것이 무엇인지 알지 못할 것입니다. 아마도 Python 용 C 확장을 프로그래밍하는 데 익숙하지 않을 것입니다.
고맙습니다. 나는 그것이 지금 어떻게되는지를 볼 수있다. 그리고 나는 정말로 그 이유를 알고 싶어한다. – Joel