(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, мне просто нужно собрать все вместе в исполняемый файл.
Примечания
- Я не могу использовать bdist для сборки исполняемого файла, мой зависимости не вводятся.
- Это не был мой исходный код или решение использовать импорт *, реальная программа использует его огромное количество раз, поэтому ручное перечисление каждого импортируемого модуля, к сожалению, не вопрос.
- В pyinstaller добавляются пути, например:
pyinstaller -n farm -p src/farm -p src/farm/types/ src/farm/run.py
- Corgi, Lab, et c - это все модули / сценарии, а не классы.
Чтобы помочь устранить путаницу в будущем, вот дерево каталогов.
"farm": {
"types": {
"animal": {
"dog": [
"Corgi.py",
"Labrador.py"
]
}
}
}