8 #include <QCoreApplication>
10 #include <QDirIterator>
16 #include <pybind11/numpy.h>
17 #include <pybind11/stl_bind.h>
21 #if defined(Q_OS_WIN32)
26 #ifdef PYCC_STAND_ALONE
27 py::module_ sysconfig = py::module_::import(
"sysconfig");
28 const QString site_packages = sysconfig.attr(
"get_path")(
"purelib").cast<QString>();
29 return QString(
"%1\\pycc\\plugins-python").arg(site_packages);
31 QDir appDir = QCoreApplication::applicationDirPath();
32 QString pluginPath = QString(
"%1\\plugins-python").arg(appDir.absolutePath());
36 #elif defined(Q_OS_MACOS)
41 #ifdef PYCC_STAND_ALONE
42 py::module_ sys = py::module_::import(
"sys");
43 const QString envPrefix = sys.attr(
"prefix").cast<QString>();
44 QString pluginPath = QString(
"%1/lib/plugins-python").arg(envPrefix);
49 QDir appDir = QCoreApplication::applicationDirPath();
51 QString pluginPath = QString(
"%1/cvPythonPlugins").arg(appDir.absolutePath());
60 #if PY_MAJOR_VERSION >= 3 && PY_MINOR_VERSION >= 9
63 py::module_ sys = py::module_::import(
"sys");
64 const QString platlibdir = sys.attr(
"platlibdir").cast<QString>();
66 const QString platlibdir =
"lib";
73 #ifdef PYCC_STAND_ALONE
75 py::module_ sys = py::module_::import(
"sys");
76 const QString envPrefix = sys.attr(
"prefix").cast<QString>();
78 QString pluginPath = QString(
"%1/%2/plugins-python").arg(envPrefix, platlibdir);
81 QDir theDir = QCoreApplication::applicationDirPath();
82 if (theDir.dirName() ==
"bin")
87 QString pluginPath = QString(
"%1/plugins-python").arg(theDir.absolutePath());
95 py::module_ pluginWrappers = m.def_submodule(
"plugins");
96 pluginWrappers.doc() =
"Module we wrap around some ACloudViewer plugins";
100 QDir pluginPathDir(pluginPath);
101 if (!pluginPathDir.exists())
107 "[PythonRuntime] Start load plugin python wrapper from: '", pluginPath.toStdString(),
"'");
108 py::module_::import(
"sys").attr(
"path").attr(
"append")(pluginPath);
109 QDirIterator iter(pluginPathDir);
110 while (iter.hasNext())
113 QFileInfo entry = iter.fileInfo();
114 QString fileName = entry.fileName();
122 const std::string stdFileName = fileName.split(
'.')[0].toStdString();
125 const py::module mod = py::module_::import(stdFileName.c_str());
126 const std::string pluginName = mod.attr(
"plugin_name").cast<std::string>();
127 pluginWrappers.attr(pluginName.c_str()) = mod;
128 py::print(
"[PythonRuntime] Plugin python wrapper found: '", pluginName,
"'");
130 catch (
const std::exception &e)
132 py::print(
"Failed to load plugin '", stdFileName,
"': ", e.what());
QString getPluginsWrappersPath()
void load_pluginWrappers(py::module_ &m)
QString guessPlatlibdir()
const char * MODULE_EXTENSION