AttributeError: модуль 'animal.dog' не имеет атрибута 'Corgi' - PullRequest
0 голосов
/ 27 апреля 2020

(Python 3.7)

Я понимаю, что этот вопрос неоднократно задавался в StackOverflow, но я не нашел ни одного, который бы углублялся в использование import *

Я использую pyinstaller для сборки своего приложения, и при запуске я получаю указанную выше ошибку. Теперь, что отличается от всего остального, что я видел, так это то, что я использую import *.

import animal
from animal import dog
from animal.dog import *
...
AttributeError: module 'animal.dog' has no attribute 'Corgi'

. Я подумал, что это было странно, так как животное существует в некоторых папках и может быть импортировано вместе с собака. Теперь я хотел узнать, можно ли сразу вызвать Corgi, поэтому я вручную импортировал его и получил следующую ошибку при попытке перезапустить исполняемый файл, сгенерированный pyinstaller.

import animal
from animal import dog
from animal.dog import Corgi
from animal.dog import *
...
AttributeError: module 'animal.dog' has no attribute 'Labrador'

Хорошо, теперь он может см. Corgi и перейдите к следующему модулю в каталоге.

Любые идеи будут великолепны! Программа работает, как и ожидалось, до использования pyinstaller, мне просто нужно собрать все вместе в исполняемый файл.

Примечания

  1. Я не могу использовать bdist для сборки исполняемого файла, мой зависимости не вводятся.
  2. Это не был мой исходный код или решение использовать импорт *, реальная программа использует его огромное количество раз, поэтому ручное перечисление каждого импортируемого модуля, к сожалению, не вопрос.
  3. В pyinstaller добавляются пути, например: pyinstaller -n farm -p src/farm -p src/farm/types/ src/farm/run.py
  4. Corgi, Lab, et c - это все модули / сценарии, а не классы.

Чтобы помочь устранить путаницу в будущем, вот дерево каталогов.

"farm": {
    "types": {
        "animal": {
            "dog": [
                "Corgi.py",
                "Labrador.py"
            ]
        }
    }
}
...