Я хотел бы упаковать свое приложение, чтобы разделить его между несколькими проектами. Мой 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
Вы также пробовали '' python setup.py install''? Не могли бы вы предоставить свою структуру каталогов? Вы в том же virtualenv, когда пытаетесь импортировать свой модуль? Почему вы используете '' py_modules'', а не '' пакеты''? Это намного более гибко ... – ziky
@ziky Я обновил сообщение, чтобы включить структуру каталогов. Я использую отдельный virtualenv, но там установлен foo_bar. TBH, я не слышал о опции «пакеты», мог ли использовать ее вместо py_module, что бы изменить ситуацию? – mateuszb
вы пытаетесь импортировать '' foo_bar'', однако в вашем пакете нет '' foo_bar.py''. Попробуйте переименовать '' bar.py'' в это имя. Однако я никогда не использовал пакеты таким образом. Обычно вы создаете пакет (каталог с файлом '' __init __. Py'') на том же уровне, что и '' setup.py''. Это означает, что вы создадите в своем проекте еще один '' foo_bar'' в вашем проекте и там вы разместите '' bar.py''. Затем вы импортируете его как '' import foo_bar.bar''. – ziky