1
Python 확장을 빌드하고 distutils를 사용하여 패키지하려고하지만 확장자는 루트 패키지에 설치됩니다. 내 디렉토리 레이아웃은 다음과 같습니다Python Extension이 서브 패키지에 설치되지 않음
foo/bar/extension.c
내 setup.py
은 다음과 같습니다
from distutils.core import setup
from distutils.extension import Extension
setup(name='foo.bar.extension',
cmdclass={'build_ext': build_ext},
ext_modules=[Extension('foo.bar.extension',
sources=['foo/bar/extension.c'])]
)
가 나는 virtualenv
를 설정하고 내 파이썬 쉘에서 다음
python setup.py install
을 실행
을>>> import foo.bar.extension
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named invest_cython_core
>>> import extension #This works!
첫 번째 import 문이 작동하고 두 번째 import 문이 실패하도록 변경할 수 있습니까?
응답 해 주셔서 감사합니다. 예, 중요하지 않다는 것을 깨달았지만 Cython의 build_ext 모듈을 사용하고 있습니다. 이 물건에 대해 많이 알지는 못하지만, Cython은 중첩 된 확장 기능과 잘 작동하지 않는 것 같습니다. 이후 내 확장 기능을 패키지의 루트로 옮겼습니다. 비록 중첩 된 상태에서 확장 기능을 선호하지만 확장 기능이 제대로 작동합니다. 컴파일 된 확장 프로그램에 대해 알아 보려면 http://docs.python.org/distutils/index.html#distutils-index 유일한 참고 자료입니까? – Rich
일반적으로 Cython의 build_ext 클래스는 distutils 클래스가 수행하는 작업을 확장해야하므로 distutils 문서가 충분해야하지만 결코 알지 못합니다. ext를 최상위로 이동하는 대신 __init__.py 파일을 만드는 제안을 테스트 해 보셨습니까? –
예, 원래 cython 파일도 __init__.py가있는 디렉토리에 있으므로 프로젝트를 설정했습니다. 이게 네가 말하는거야? 또한 Cython FAQ에서 Cython을 하위 패키지와 함께 컴파일 할 수 없다는 것을 알 수 있습니다. 그게 내 문제가 무엇인지에 대한 설명인지 확실하지 않습니다. http://wiki.cython.org/FAQ#HowtocompileCythonwithsubpackages – Rich