установка в пипс успешно, но Python говорит, что модуль не найден - PullRequest
0 голосов
/ 17 февраля 2020

Я пытаюсь установить пакет с помощью pip. Установка прошла успешно, но при попытке импортировать модули в подпакет он показывает сообщение об ошибке «ModuleNotFoundError: Модуль не назван ...».

Структура пакета следующая:

Gestor_Clientes_v2 /
├─ LICENCE.txt
├─ manager_main /
├─ __init __. Py
├─ run.py
├─ support.py
├─ manager_clients.py
└─ menu.py
├─ README.md
├─ setup.py
└─ test /
├─ __init __. py
└─ test_manager_clients.py

Файл установки содержит следующую информацию:

#!/usr/bin/env python

from setuptools import setup, find_packages

with open('README.md') as file: readme = file.read()

setup(name = 'gestor-clientes',
      version = '2.0',
      author = 'author',
      author_email = 'info@server.com',
      url = 'https://www.server.com/',
      description = 'Un simple gestor de clientes',
      long_description = readme,
      packages = ['manager'],
      test_suite = 'program.test',
      entry_points = {'console_scripts': ['program = manager.run:main']},
      license = 'MIT Licence',
      keywords = 'gestor clientes proyecto',
      classifiers = [
          'Development Status :: 2 - Pre-Alpha',
          'Topic :: Education',
          'Intended Audience :: Education',
          'License :: OSI Approved :: MIT License',
          'Programming Language :: Python :: 3 :: Only',
          'Operating System :: Linux',
          'Operating System :: MacOS',
          'Operating System :: Windows'
      ]



      )

__ init __. Py

__all__ = ['run', 'manager_clients', 'menu', 'support']

menu.py

"""Fichero principal del programa"""

from sys import path 
path.append('..')

from menu import Menu


def main():
    Menu.options()

if __name__ == '__main__':
    main()

manager_clients.py

""" Administrador de clientes """
import sys
sys.path.append("..")
from manager import support


class ClientData:

    def __init__(self, name: str, first_surname:str, second_surname:str, birth_date:str, nationality:str, nip:str):
        self.name = name
        self.first_surname = first_surname
        self.second_surname = second_surname
        self.birth_date = birth_date
        self.nationality = nationality
        self.nip = nip

    def __str__(self):
        return f"{self.nip}: {self.first_surname} {self.second_surname} {self.name} {self.birth_date} {self.nationality}"

#more code...

menu.py

""" Menú del programa """
from sys import path
path.append('..')

from manager.support import clear_screen
from manager.manager_clients import ClientAdmin

class Menu:

    def options():
        while True:
            clear_screen()  
            print("========================\n",\
                  "|BIENVENIDO AL GESTOR|",\
                  "\n========================",\
                  "\n    Elija una opción    ",\
                  "\n------------------------",\
                  "\n[1] Lista de clientes.",\
                  "\n[2] Buscar cliente.",\
                  "\n[3] Añadir nuevo cliente.",\
                  "\n[4] Actualizar datos del cliente.",\
                  "\n[5] Borrar cliente.",\
                  "\n[6] Salir.")

            option = input(">>> ")
            clear_screen()
            if option == '1':
                print("--INFORMACIÓN DE CLIENTES DISPONIBLES--\n")
                ClientAdmin.info_all_clients()

#more code...

support.py

"""Funciones de ayuda"""
from sys import path
from os import system
import re
from platform import system as OS
path.append("..")

from manager import manager_clients



def clear_screen():
    if OS() == "Windows":
        system('cls')
    else:
        system('clear')


def input_text(min_len, max_len):
    while True:
        text = input("> ")
        if len(text) >= min_len and len(text) <= max_len:
            return text


def is_valid(nip: str):
    if not re.match('[0-9]{2}[A-Z]{3}', nip):
        return False
    for c in manager_clients.ClientAdmin.clients:
        if c.nip == nip:
            return False
    return True

Когда я запускаю скрипт «run.py» из командной строки, программа работает правильно так же, как когда я запускаю тест s. Когда я устанавливаю пакет, используя pip install Gestor_Clientes_v2/, я получаю следующее:

Processing ./Gestor_Clientes_v2
Building wheels for collected packages: gestor-clientes
  Building wheel for gestor-clientes (setup.py) ... done
  Created wheel for gestor-clientes: filename=gestor_clientes-2.0-cp37-none-any.whl size=6120 sha256=50337e3ed6672cf714d81103c53dd3b957f6c10722c14f952b49baa1a814dbac
  Stored in directory: /tmp/pip-ephem-wheel-cache-be04i_g5/wheels/e4/03/c1/ce19d5766499ca97b57afbdc34598a26f32ca3b9eb01754979
Successfully built gestor-clientes
Installing collected packages: gestor-clientes
Successfully installed gestor-clientes-2.0

Пакеты появляются в pip list как gestor-clientes , но когда я хочу импортировать любой из модулей в "manager /" я получаю сообщение об ошибке:

In [1]: import manager                                                
----------------------------------------------------------------------
ModuleNotFoundError                  Traceback (most recent call last)
<ipython-input-1-26cb231bd30e> in <module>
----> 1 import manager

~/anaconda3/lib/python3.7/site-packages/manager/__init__.py in <module>
----> 1 from manager import run
      2 from manager import manager_clients
      3 from manager import menu
      4 from manager import support

~/anaconda3/lib/python3.7/site-packages/manager/run.py in <module>
      4 path.append('..')
      5 
----> 6 from menu import Menu
      7 
      8 

ModuleNotFoundError: No module named 'menu'

In [2]:

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

I Я относительно новичок в Python, и есть еще много вещей, которые я не очень хорошо знаю, и я думаю, что что-то отсутствует в моих модулях и в моем установочном файле.

Я надеюсь, что вы можете помочь мне просмотреть структуру моего пакета и дать мне несколько идей, чтобы решить мою проблему. Заранее спасибо.

1 Ответ

0 голосов
/ 17 февраля 2020

Я думаю, вы должны попытаться установить пакет, используя pip3, основываясь на предыдущем синтаксисе

pip3 install packagename

В некоторых случаях, когда у вас есть предустановленный Python 2, это может быть решением, потому что даже если вы установили пакет, доступ к нему может получить только интерпретатор Python 2, так как это разные установки.

...