我正在创建一个Python包,其结构如下:
VisionPy/
│ __init__.py
│ main.py
│ plugin_interface.py
│ README.md
│
├── controllers/
│ ├── __init__.py
│ ├── imagecontroller.py
│ ├── volumecontroller.py
│
├── models/
│ ├── __init__.py
│ ├── imagemodel.py
│ ├── volumemodel.py
│
├── plugins/
│ ├── CScan/
│ │ ├── __init__.py
│ │ ├── NDEToolkit.py
│ │ ├── plugin.py
│ │ ├── requirements.txt
│ ├── __init__.py
│
├── ui/
│ ├── views/
│ │ ├── __init__.py
│ │ ├── imageview.py
│ │ ├── label.py
│ │ ├── mainview.py
│ │ ├── volumeview.py
│ ├── __init__.py
│
├── utils/
├── __init__.py
├── progress_window.py
字符串
我的问题是,这意味着以后编译和执行的方式,它允许我创建插件的Cscan是。
到目前为止,我执行应用程序的方法是从VisionPy目录中运行python main.py
。目前的问题是我无法从 plugin.py 导入NDEToolkit,尽管它们在同一个文件夹中。这是一个问题,因为我想创建一个插件界面,即使对不太了解编程的人也可以轻松访问,将文件夹附加到系统路径似乎不是实现它的最佳方法。
此外,我希望能够编译项目与PyInstaller或一些类似的包,使它很容易只是粘贴到插件,其中至少包含一个文件夹 * plugin.py * 和一个 * requirements.txt * 文件,这是我的界面工程。
我不知道我是否真的需要所有这些 * init**.py* 文件,因为我不打算把整个东西打包,因为它是一个用PyQt 5开发的GUI应用程序,main.py 看起来像这样:
# main.py
import sys
from PyQt5.QtWidgets import QApplication
from controllers.imagecontroller import ImageController
from controllers.volumecontroller import VolumeController
from ui.views.mainview import MainView
def main():
app = QApplication(sys.argv)
# Create the main view
main_view = MainView()
# Create the controllers and pass the main_view to them
image_controller = ImageController(main_view)
volume_controller = VolumeController(main_view)
# Set controllers in the main view
main_view.set_image_controller(image_controller)
main_view.set_volume_controller(volume_controller)
# Show the main view
main_view.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
型
正如musicamante指出的,这是给我带来问题的代码,它是 *VisionPy/plugins/CScan/plugin.py *:
from plugin_interface import PluginInterface
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from pathlib import Path
import traceback
import sys
import os
print(sys.path)
plugin_dir = str(Path(__file__).parent.resolve())
if plugin_dir not in sys.path:
sys.path.append(plugin_dir)
import NDEToolkit as ndt
import numpy as np
import tifffile
import matplotlib.pyplot as plt
class Plugin(PluginInterface):
.
.
.
型
问题出现在import NDEToolkit as ndt
行中,正如您所看到的,NDEToolkit.py 与 plugin.py 位于同一个文件夹中,这是我试图导入它的文件。
我组织这个项目时考虑了MVC模式。
1条答案
按热度按时间koaltpgm1#
您正在尝试从子包导入。您需要执行绝对导入(首选方法)或相对导入。
绝对导入:
字符串
相对导入:
型
这在PEP 8(上面链接),其他questions和answers以及free online sources中有很好的记录。