Установленный скрипт Python не может импортировать модули пакета

Я создал пакет Python со следующей структурой каталогов:

/ LICENSE MANIFEST.IN README.rst VERSION docs/ multitool/ __init__.py core/ __init__.py classes.py utils.py libs/ multitool.py tests/ tools/ __init__.py hashtool.py webtool.py setup.py 

Целью является создание приложения командной строки (multitool.py), которое могут добавить третьи стороны, добавив свои собственные файлы в каталог инструментов. Это достигается тем, что они создают подкласс класса, который я создал. Например, это первые несколько строк hashtool.py:

 import multitool class HashTool(multitool.core.classes.CLITool): 

Все это работает, пока я запускаю его из самого каталога проекта:

 $ ./multitool.py -h <---works $ ./multitool/multitool.py -h <---works 

Проблема возникает, когда я пытаюсь создать и установить ее в виде пакета. Установка запускает и устанавливает сценарий. Однако при запуске скрипта он не может найти ни одного из модулей в пакете:

 $ multitool.py import core ImportError: No module named core 

Я попытался изменить импорт на multitool, multitool.core, .multitool, ..multitool и другие с тем же результатом.

Тем не менее, я могу делать импорт из интерпретатора Python:

 Type "help", "copyright", "credits" or "license" for more information. >>> import multitool >>> import multitool.core >>> import multitool.core.classes >>> from multitool import core >>> 

Вот соответствующая часть моего setup.py

 setup( name = 'multitool', version = __version__, license = 'GPLv2', packages = find_packages(exclude=['test/']), scripts = ['multitool/multitool.py'], include_package_data = True, .... ) 

Что я делаю не так? Как я могу импортировать свой собственный код и файлы из каталога инструментов в сценарий, который я устанавливаю вместе с пакетом?

Обновленный отредактированный комментарий MrAlias ​​ниже работал. Путаница заключалась в том, что сценарий был тем же именем, что и сам пакет, и не был в отдельной папке. Перемещение сценария в его собственный каталог bin / разрешило проблему.

2 Solutions collect form web for “Установленный скрипт Python не может импортировать модули пакета”

Во-первых, когда вы устанавливаете пакет, вы импортируете ядро, не указав, что он отличается от пакета с несколькими компонентами. Так:

 import core 

должно быть,

 from multitool import core 

Таким образом, интерпретатор знает модуль для импорта ядра.

[Редактировать]

Что касается структуры каталогов установленного пакета, скрипты должны перейти в отдельный каталог из самого модуля. То, как показана структура каталогов Distutils, установит сценарий, который вы назвали, и в том месте, где ваша система ищет исполняемые файлы, так и в самом пакете, что, вероятно, связано с путаницей.

 import multitool class HashTool(multitool.core.classes.CLITool): 

Импорт пакета не импортирует его подпакеты и подмодули. Попробуй это:

 import multitool.core.classes class HashTool(multitool.core.classes.CLITool): 
  • setup.py: ограничить допустимую версию интерпретатора python
  • Cython setup.py для нескольких .pyx
  • Ответ сервера PyPi 500
  • Как добавить данные пакета рекурсивно в Python setup.py?
  • Python 2 и 3 совместимые модули пространства имен (с использованием pip)
  • перечисление нескольких версий на pypi
  • Тесты не преобразуются на 2to3 в setup.py?
  • entry_points не создает пользовательские скрипты с помощью pip или easy_install в Python?
  •  
    Interesting Posts for Van-Lav

    Переменная экземпляра класса Python mock

    Как получить доступ к данным из указателя в struct из Python с помощью ctypes?

    Python: разделите строковое поле на 3 отдельных поля, используя Lambda

    Запрос Python для пользователя с эхом и паролем без эха

    Получение нескольких сообщений через socketserver, но один отправляется

    Окно консоли AJAX с поддержкой ANSI / VT100?

    Почему Python urlparse.parse_qs () разделяет аргументы на точку с запятой

    python / scapy DNS-анализатор и анализатор

    Как получить значение тега XML в Python

    selenium не устанавливает downloaddir в FirefoxProfile

    Почему я не могу присоединиться к этому кортежу в Python?

    random.randint (2, 12) возвращает одинаковые результаты каждый раз, когда он запускается в Python

    как создавать случайные случайные ациклические ориентированные графы с отрицательными весами в python

    Как сказать py.test пропустить определенные каталоги?

    Python: анализ ввода, чтобы увидеть, является ли его целым числом, плавающей точкой или строкой

    Python - лучший язык программирования в мире.