Почему мой пакет Python не находит мой класс? - PullRequest
0 голосов
/ 16 мая 2019

Я пытаюсь преобразовать мой большой скрипт Python в пакет. У меня есть следующая структура файла:

bin/foob # The main Python script
lib/foob/__init__.py

В файле lib / foob / __ init__.py определен один класс:

class Node(object):
    def __init__(self):
        self.test = True

Файл bin / foob имеет:

import foob

def get_nodes():
    x = foob.Node()

get_nodes()

Я запускаю скрипт с:

$ PYTHONPATH=PYTHONPATH:~/foob/lib ~/foob/bin/foob

Я получаю ошибку:

Traceback (most recent call last):
  File "/home/person/foob/bin/foob", line 6, in <module>
    x = get_nodes()
  File "/home/person/foob/bin/foob", line 4, in get_nodes
    node_obj = foob.Node()
AttributeError: module 'foob' has no attribute 'Node'

Эта структура, кажется, идентична другой программе, которую я написал, которая прекрасно работает Чего мне не хватает?

1 Ответ

0 голосов
/ 16 мая 2019

Я думаю, что проблема в Конфликт имен .Вы импортируете модуль bin/foob вместо lib/foob.

Последовательность импорта Python

Когда вы что-то import что-то, интерпретатор Python будет искать в следующей последовательности:

  1. встроенный модуль.
  2. Текущий каталог.
  3. Переменная среды: PYTHONPATH
  4. Некоторые другие каталоги (не имеет отношения к этому вопросу)

последние три из которых можно увидеть по import sys; sys.path


По-видимому, вы находитесь в bin/foob, поэтому вы импортируете bin/foob.Это можно проверить по import os; os.getcwd().

Я рекомендую вам избегать того же имени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...