2016-09-03 2 views
1

내 응용 프로그램을 패키지화하여 여러 프로젝트간에 공유하고 싶습니다. 내 setup.py은 다음과 같습니다 distutils와 함께 배포 된 모듈을 가져올 수 없습니다.

# -*- coding: utf-8 -*- 
from distutils.core import setup 

setup(
    name='foo_bar', 
    version='1.0', 
    py_modules=['foo_bar'], 
    install_requires=[ 
     'bitstring==3.1.5', 
     'pytz==2016.4', 
     'wheel==0.24.0', ] 
) 

가 그럼 난 나를

내 foo_bar 응용 프로그램을 사용에 문제가에 대한 tar.gz 파일을 생성 명령

python setup.py sdist 

를 실행합니다. 나는 주사위를 통해 별도의 VIRTUALENV로를 설치하고있어

pip install dist/foo_bar.tar.gz 

내가 파이썬 콘솔에서이 모듈을 가져올 때 PIP 동결의 출력이

foo-bar==1.0 
bitstring==3.1.5 
pytz==2016.4 
wheel==0.24.0 

를 설치 제안

import foo_bar 

내가 얻을 ImportError: No module named 'foo_bar'

내가 뭘까요?

편집 :

foo_bar 
├── dist 
│   └── foo_bar-1.0.tar.gz 
├── __init__.py 
├── MANIFEST 
├── bar.py 
├── requirements.txt 
├── setup.py 
+0

''python setup.py install''도 시도해 보셨습니까? 디렉토리 구조를 제공 할 수 있습니까? 모듈을 가져올 때 동일한 virtualenv에 있습니까? 왜''packages'가 아닌''py_modules''를 사용하고 있습니까? 그것은 훨씬 더 유연합니다 ... – ziky

+0

@ziky 디렉토리 구조를 포함하도록 내 게시물을 업데이트했습니다. 별도의 virtualenv를 사용하고 있지만 거기에 foo_bar가 설치되어 있습니다. TBH, 'packages'옵션에 대해 들어 보지 못했습니다. py_module 대신에 사용할 수 있습니까? – mateuszb

+1

당신은''foo_bar''를 가져 오려고합니다, 그러나''foo_bar.py''는 패키지 안에 없습니다! 그 이름으로''bar.py''의 이름을 변경하십시오. 그러나 나는 이런 방식으로 패키지를 사용한 적이 없다. 보통''setup.py''와 같은 레벨에 패키지 (''__init __. py'' 파일로 디렉토리)를 만듭니다. 즉, 프로젝트에서 다른''foo_bar'' 디렉토리를 만들고 거기에''bar.py''를 놓을 것입니다. 그런 다음''import foo_bar.bar''와 같이 가져올 것입니다. – ziky

답변

1

당신이 당신의 디렉토리 구조를 제공 할 수있다 :

내 파일 구조는 다음과 같습니다? 모듈을 가져올 때 동일한 virtualenv에 있습니까? py_modules을 사용하고 있는데 packages이 아닌 이유는 무엇입니까?

또한 foo_bar을 가져 오려고하는데, foo_bar.py이 패키지에 없습니다. 해당 이름을 bar.py으로 변경하십시오.

참고 : 패키지를 이런 식으로 사용한 적이 없습니다. 일반적으로 setup.py과 같은 레벨에 패키지 (디렉토리가 __init__.py 인 디렉토리)를 만듭니다. 즉, 프로젝트에서 다른 foo_bar 디렉토리를 만들고 거기에 bar.py을 배치 할 것입니다. 그런 다음 import foo_bar.bar과 같이 가져옵니다.