【发布时间】:2020-02-17 13:55:49
【问题描述】:
我正在尝试使用 pip 安装一个软件包。安装成功,但在尝试导入子包中的模块时,它会显示一条错误消息,提示“ModuleNotFoundError: No module named...”。
包的结构如下:
Gestor_Clientes_v2/
├─ LICENCE.txt
├─ manager_main/
├─ __init__.py
├─ run.py
├─ support.py
├─ manager_clients.py
└─ menu.py
├─ README.md
├─ setup.py
└─ 测试/
├─ __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”脚本时,程序正常运行,就像我运行测试时一样。当我使用 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
这些包以 gestor-clientes 的形式出现在 pip list 中,但是当我想在“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]:
我参考了具有相似结构的不同包示例,当我安装它们时,我可以导入它们的模块。
我对 Python 比较陌生,还有很多东西我不太了解,我认为我的模块和设置文件中缺少一些东西。
我希望你能帮助我检查我的包的结构并给我一些解决我的问题的想法。提前致谢。
【问题讨论】:
-
确保您的环境中没有 2 个 python 实例。您可以通过运行 python 解释器并尝试在不运行所有程序的情况下导入它来验证您是否拥有此模块。您还可以确保您的模型名称是正确的
-
我不是专家,但我有点认为 python 正在您的站点包中寻找一个名为“manager”的模块,而这不是 python 可以找到的包名称。尝试打开一个 python shell 并输入
from gestor-clientes import manager或import gestor-clientes看看会发生什么。如果其中一个没有引发错误,那就是问题所在。 -
@OdedBD 我目前在我的系统上安装了 Anaconda。我有 Windows 和 Linux xfce,在这两个系统上我都有同样的问题。
-
@MichaelGreen 以前,我在另一个名为“program”的目录中有“manager”和“test”目录,并且在那里还放了一个 init.py 文件,据我了解,允许 Python 将其视为一个包,但问题也是一样的。
标签: python module installation package