#python
Вопрос:
Я хочу запустить свой код на python с помощью этой команды:
python3.8 __main__.py
но показывает эту ошибку:
[dolphin@MiWiFi-R4CM-srv]~/Documents/GitHub/musicbox/NEMbox% python3.8 __main__.py
Traceback (most recent call last):
File "__main__.py", line 9, in <module>
from . import __version__
ImportError: attempted relative import with no known parent package
это __main__.py
файл:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import _curses
import argparse
import curses
import sys
import traceback
from . import __version__
from .menu import Menu
def start():
version = __version__
parser = argparse.ArgumentParser()
parser.add_argument(
"-v", "--version", help="show this version and exit", action="store_true"
)
args = parser.parse_args()
if args.version:
latest = Menu().check_version()
try:
curses.endwin()
except _curses.error:
pass
print("NetEase-MusicBox installed version:" version)
if latest != version:
print("NetEase-MusicBox latest version:" str(latest))
sys.exit()
nembox_menu = Menu()
try:
nembox_menu.start_fork(version)
except (OSError, TypeError, ValueError, KeyError, IndexError):
# clean up terminal while failed
try:
curses.echo()
curses.nocbreak()
curses.endwin()
except _curses.error:
pass
traceback.print_exc()
if __name__ == "__main__":
start()
и это __init__.py
файл на том же уровне __main__.py
:
from importlib_metadata import version
from .const import Constant
from .utils import create_dir
from .utils import create_file
__version__ = version("NetEase-MusicBox")
def create_config():
create_dir(Constant.conf_dir)
create_dir(Constant.download_dir)
create_file(Constant.storage_path)
create_file(Constant.log_path, default="")
create_file(Constant.cookie_path, default="#LWP-Cookies-2.0n")
create_config()
почему это произошло и что я должен сделать, чтобы решить эту проблему?
Ответ №1:
Когда вы непосредственно выполняете сценарий с python <script name>
помощью , этот сценарий является __main__
модулем. Это не является частью пакета. Относительный импорт работает только изнутри пакета, так как python должен иметь родительский пакет для импорта относительно.
Учитывая, что у вас есть __init__.py
и __main__.py
файл внутри NEMbox
папки , я предполагаю, что вы можете заставить его правильно мыслить, выполнив (из папки, которая содержит NEMbox
, например musicbox
) python3 -m NEMbox
. Это приведет к выполнению модуля NEMbox
. Когда NEMbox
будет выполнен пакет, а не непосредственно файл NEMbox.__main__
(что вам здесь нужно).
(Примечание: я не могу прочитать язык, но на оригинальной странице github, похоже, есть точные инструкции по установке.