ModuleNotFoundError при попытке создать пользовательский пакет, который должен работать как сценарий командной строки - PullRequest
0 голосов
/ 21 декабря 2018

Я хотел бы иметь возможность выполнить trump и получить случайную кавычку, используя API отдыха.
ПРИМЕЧАНИЕ: Нет питона до козыря

У меня есть следующееСтруктура каталогов -

trump  
|--setup.py  
|--trump  
   |-- quote.py
   |-- __init__.py
   |-- __main__.py

setup.py содержит -

from setuptools import setup, find_packages
import sys

if sys.version_info[0] != 3:
    raise RuntimeError('Unsupported python version "{0}"'.format(sys.version_info[0]))

setup(name='trump',
      version='0.1',
      description='Trumps tweets',
      keywords=['trump'],
      #include_package_data=True,
      packages=find_packages('trump'),
      package_dir={'':'trump'},
      license='GNU GPL v3',
      python_requires="!=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*",
      install_requires=[
          'requests',
      ],
      entry_points = {
            'console_scripts': [
                'trump = trump.__main__:main'
          ]
      },
      zip_safe=False
      )

__init__.py пусто.
__main__.py содержит -

import quote
def main():
    quote.vomit()

if __name__=='__main__':
    main() 

Аquote.py содержит -

import requests

def vomit():
    api_response = requests.get('http://api.tronalddump.io/random/quote')
    quote = api_response.json()['value']

    print(quote)

В корневом каталоге, когда я запускаю python3 trump, тогда я получаю правильные результаты.Однако, когда я устанавливаю его через pip как pip3 install --user -e ., а затем пытаюсь выполнить trump, я получаю следующую ошибку -

 $ trump
Traceback (most recent call last):
  File "/home/walker/.local/bin/trump", line 11, in <module>
    load_entry_point('trump', 'console_scripts', 'trump')()
  File "/home/walker/.local/lib/python3.6/site-packages/pkg_resources/__init__.py", line 487, in load_entry_point
    return get_distribution(dist).load_entry_point(group, name)
  File "/home/walker/.local/lib/python3.6/site-packages/pkg_resources/__init__.py", line 2728, in load_entry_point
    return ep.load()
  File "/home/walker/.local/lib/python3.6/site-packages/pkg_resources/__init__.py", line 2346, in load
    return self.resolve()
  File "/home/walker/.local/lib/python3.6/site-packages/pkg_resources/__init__.py", line 2352, in resolve
    module = __import__(self.module_name, fromlist=['__name__'], level=0)
ModuleNotFoundError: No module named 'trump'

Я пытался следовать документациям упаковки Python , ноне могу понять, почему это происходит.

РЕДАКТИРОВАТЬ:
После выполнения packages=find_packages() я получаю следующую ошибку -

$ pip install --user -e .
Obtaining file:///trump
    Complete output from command python setup.py egg_info:
    running egg_info
    writing trump/trump.egg-info/PKG-INFO
    writing dependency_links to trump/trump.egg-info/dependency_links.txt
    writing entry points to trump/trump.egg-info/entry_points.txt
    writing requirements to trump/trump.egg-info/requires.txt
    writing top-level names to trump/trump.egg-info/top_level.txt
    error: package directory 'trump/trump' does not exist

    ----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /trump/

Это приводит меня к мысли, что мойконфигурация для package_dir и packages неверна.Но проблема в том, что если я прокомментирую package_dir строку и в любом случае package (с козырем или пустым) я получу следующий ответ -

$ trump
bash: trump: command not found

1 Ответ

0 голосов
/ 21 декабря 2018

Удалить 'trump' из packages=find_packages('trump').'trump' - это пакет, который вы хотите включить в дистрибутив, тогда как find_packages('trump') просматривает каталог trump/, не находит там никаких пакетов и возвращает пустой список.

packages=find_packages()

Также вы не обращаете вниманияpackage_dir вообще не нужно.Он будет использоваться в том случае, если у вас есть подкаталог trump/, скажем, src/, поэтому вы будете использовать

package_dir = {'': 'src'},

...