Пытаюсь сделать модуль Python доступным через PyPi

Некоторое время назад я написал простой интерфейс Python для работы со службой уведомлений Pushwoosh, который находится по адресу https://github.com/Astutech/Pushwoosh-Python-library, и я наконец-то смог опубликовать его, чтобы его можно было установить с помощью Pip. Это первый раз, когда я публикую библиотеку Python для PyPi, и я немного запутался.

При попытке установить выдает следующую ошибку:

Collecting pushwoosh
  Using cached pushwoosh-1.0.0.tar.gz
    Complete output from command python setup.py egg_info:
    Traceback (most recent call last):
      File "<string>", line 20, in <module>
      File "/tmp/pip-build-5m3jj7uu/pushwoosh/setup.py", line 17, in <module>
        with open(path.join(here, 'DESCRIPTION.rst'), encoding='utf-8') as f:
      File "/usr/lib/python3.4/codecs.py", line 896, in open
        file = builtins.open(filename, mode, buffering)
    FileNotFoundError: [Errno 2] No such file or directory: '/tmp/pip-build-5m3jj7uu/pushwoosh/DESCRIPTION.rst'

    ----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-5m3jj7uu/pushwoosh

Это похоже на какую-то проблему, связанную с путем. Я не уверен, что pushwoosh.py находится в правильном месте. Но если я перемещу его в pushwoosh/pushwoosh.py и добавлю файл pushwoosh/__init__.py, мне нужно будет импортировать его следующим образом:

from pushwoosh.pushwoosh import Pushwoosh

Это явно не идеально. Из документации я не вижу, где я ошибся. Какой макет каталога я должен использовать?

РЕДАКТИРОВАТЬ: теперь я решил проблему с DESCRIPTION.rst, но если я не перемещу файл pushwoosh.py в папку pushwoosh и не добавлю файл __init__.py, установка библиотеки фактически не установит pushwoosh.py, поэтому она не работает. Как я могу изменить его, чтобы я мог импортировать его таким образом?

from pushwoosh import Pushwoosh

person Matthew Daly    schedule 10.07.2015    source источник
comment
Вероятно, вы не включаете DESCRIPTION.rst в свой пакет. Просмотр: stackoverflow. ком/вопросы/11848030/   -  person Thomas Orozco    schedule 10.07.2015
comment
@ThomasOrozco Я отредактировал свой ответ, так как эта часть была решена   -  person Matthew Daly    schedule 10.07.2015


Ответы (2)


Разобрался в итоге. Это работает, если вы поместите файл в папку module_name как __init__.py.

person Matthew Daly    schedule 13.07.2015

Вы могли бы просто поместить это в свой файл __init__py.

from pushwoosh import Pushwoosh

Это позволяет выполнять импорт таким образом, не упаковывая все в сам файл init.py.

from pushwoosh import Pushwoosh

для хорошего объяснения ознакомьтесь с этим сообщением http://mikegrouchy.com/blog/2012/05/be-pythonic-__init__py.html

person Karl    schedule 28.08.2015