2016-09-03 8 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', ] 
) 

Затем я запускаю команду

python setup.py sdist 

, который создает файл tar.gz для меня

У меня возникли проблемы с помощью моего foo_bar приложения. Я устанавливаю его в отдельный virtualenv через пип

pip install dist/foo_bar.tar.gz 

и выход пип замораживания предполагает, что он установлен

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

Когда я пытаюсь импортировать этот модуль в питона консоли

import foo_bar 

Я получаю ImportError: No module named 'foo_bar'

Что мне не хватает?

Edit:

Моя файловая структура выглядит следующим образом:

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

Вы также пробовали '' python setup.py install''? Не могли бы вы предоставить свою структуру каталогов? Вы в том же virtualenv, когда пытаетесь импортировать свой модуль? Почему вы используете '' py_modules'', а не '' пакеты''? Это намного более гибко ... – ziky

+0

@ziky Я обновил сообщение, чтобы включить структуру каталогов. Я использую отдельный virtualenv, но там установлен foo_bar. TBH, я не слышал о опции «пакеты», мог ли использовать ее вместо py_module, что бы изменить ситуацию? – mateuszb

+1

вы пытаетесь импортировать '' foo_bar'', однако в вашем пакете нет '' foo_bar.py''. Попробуйте переименовать '' bar.py'' в это имя. Однако я никогда не использовал пакеты таким образом. Обычно вы создаете пакет (каталог с файлом '' __init __. Py'') на том же уровне, что и '' setup.py''. Это означает, что вы создадите в своем проекте еще один '' foo_bar'' в вашем проекте и там вы разместите '' bar.py''. Затем вы импортируете его как '' import foo_bar.bar''. – ziky

ответ

1

Не могли бы вы предоставить структуру каталогов? Вы в том же virtualenv, когда пытаетесь импортировать свой модуль? Почему вы используете py_modules, а не packages?

Кроме того, вы пытаетесь импортировать foo_bar, однако в вашем пакете нет foo_bar.py! Попробуйте переименовать bar.py на это имя.

Примечание: Я никогда не использовал пакеты таким образом. Обычно вы создаете пакет (каталог с файлом __init__.py) на том же уровне, что и setup.py. Это означает, что вы создадите еще один foo_bar dir в проекте и там вы разместите bar.py. Затем вы импортируете его как import foo_bar.bar.