У меня проблема с импортом при работе с этим многофайловым проектом.
Это структура каталогов
aluminium@aluminium:~/Desktop/mad/build/lib$ ls -R
./madesigner.py
./madgui:
build_tab_ui.py flap_ui.py overview.py sheet_ui.py trailing_edge_ui.py
combobox_nowheel.py __init__.py simple_hole_ui.py version.py
creator_ui.py leading_edge_ui.py shaped_hole_ui.py spar_ui.py wing_ui.py
./madlib:
ac3d.py builder.py freecad.py layout.py spline.py test.py
airfoil.py contour.py __init__.py structure.py wing.py
Первые несколько операторов импорта из freecad. Файл py выглядит следующим образом:
import sys
import os.path
# path to your FreeCAD.so or FreeCAD.dll file
FREECADPATH = '/usr/lib/freecad-python3/lib/'
sys.path.append(FREECADPATH)
import FreeCAD
import Part, Mesh
from FreeCAD import Base
Первые несколько операторов импорта файла builder.py выглядят следующим образом
from . import ac3d
from . import freecad
from . import contour
from .wing import Wing
Теперь, когда я пытаюсь выполнить ./madesigner.py, это трассировка стека. Я получаю следующий порядок вызова
madesigner.py -> mad gui .creator_ui -> madlib.builder import Builder->. import freecad
aluminium@aluminium:~/Desktop/mad/build/lib$ python madesigner.py
Traceback (most recent call last):
File "madesigner.py", line 14, in <module>
from madgui.creator_ui import CreatorUI
File "/home/aluminium/Desktop/mad/build/lib/madgui/creator_ui.py", line 31, in <module>
from madlib.builder import Builder
File "/home/aluminium/Desktop/mad/build/lib/madlib/builder.py", line 17, in <module>
from . import freecad
File "/home/aluminium/Desktop/mad/build/lib/madlib/freecad.py", line 13, in <module>
import FreeCAD
ImportError: /home/aluminium/anaconda3/lib/python3.7/site-packages/PyQt5/../../../libQt5Core.so.5: version `Qt_5.12' not found (required by /usr/lib/freecad-python3/lib/libFreeCADApp.so)
Независимо от этой ошибки PyQt5, когда я на самом деле go захожу в ./madlib и выполняю freecad.py, она прекрасно работает как в виде файла, так и в виде модуля
aluminium@aluminium:~/Desktop/mad/build/lib/madlib$ python freecad.py
FreeCAD 0.18.4, Libs: 0.18.4R
aluminium@aluminium:~/Desktop/mad/build/lib/madlib$ python -m freecad
FreeCAD 0.18.4, Libs: 0.18.4R
И когда я пытаюсь скомпилировать builder.py, я получаю следующую ошибку, которая очень странная, поскольку ac3d.py и builder.py находятся в одном каталоге.
aluminium@aluminium:~/Desktop/mad/build/lib/madlib$ python -m builder
Traceback (most recent call last):
File "/home/aluminium/anaconda3/lib/python3.7/runpy.py", line 193, in _run_module_as_main
"__main__", mod_spec)
File "/home/aluminium/anaconda3/lib/python3.7/runpy.py", line 85, in _run_code
exec(code, run_globals)
File "/home/aluminium/Desktop/mad/build/lib/madlib/builder.py", line 16, in <module>
from . import ac3d
ImportError: attempted relative import with no known parent package
После пробуя около сотни или около того SE сообщений, я не мог понять, что происходит.
- И madlib, и mad gui имеет __init__.py "файлы
- Разработчик Вчера этот проект зафиксировал эти файлы в GitHub, подтвердив, что он работает (после того, как сам проверил это). Поэтому не нужно вносить никаких изменений в файл
- FreeCAD.so, импортированный из точного путь, поэтому относительный путь не должен входить в игру.
Может кто-нибудь указать, что мне не хватает и почему я получаю эту ошибку?