All of lore.kernel.org
 help / color / mirror / Atom feed
* [Buildroot] [git commit] opencv3: fix Python module build for Python 3.x
@ 2018-04-01  8:46 Thomas Petazzoni
  2018-04-11 15:47 ` Peter Korsgaard
  0 siblings, 1 reply; 2+ messages in thread
From: Thomas Petazzoni @ 2018-04-01  8:46 UTC (permalink / raw)
  To: buildroot

commit: https://git.buildroot.net/buildroot/commit/?id=8ba80282c3bb580c6a45ea114e70acac98fe1690
branch: https://git.buildroot.net/buildroot/commit/?id=refs/heads/master

When the OpenCV3 Python support is enabled with Python 3.x, it builds
properly, and the resulting .so file is built for the target
architecture, but its name is wrong:

  output/target/usr/lib/python3.6/site-packages/cv2.cpython-36m-x86_64-linux-gnu.so

This prevents Python 3.x from importing the module:

>>> import cv2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'cv2'

In order to fix this, we simply need to pass PKG_PYTHON_DISTUTILS_ENV
in the environment. The Python module then gets named:

  output/target/usr/lib/python3.6/site-packages/cv2.cpython-36m-arm-linux-gnueabi.so

And can be imported properly:

>>> import cv2
>>>

This solution was suggested by Arnout Vandecappelle in
https://stackoverflow.com/questions/49059035/buildroot-opencv3-python-package-builds-for-the-wrong-target.

With Python 2.x, the module is named just cv2.so so this problem isn't
visible. However, for consistency, we also pass
PKG_PYTHON_DISTUTILS_ENV when building against Python 2.x, by putting
the OPENCV3_CONF_ENV assignment inside the
BR2_PACKAGE_OPENCV3_LIB_PYTHON condition, but outside the
BR2_PACKAGE_PYTHON3/BR2_PACKAGE_PYTHON condition.

Signed-off-by: Sasha Shyrokov <alexander-shyrokov@idexx.com>
[Thomas: extend the commit log, apply the solution to Python 2.x.]
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
---
 package/opencv3/opencv3.mk | 1 +
 1 file changed, 1 insertion(+)

diff --git a/package/opencv3/opencv3.mk b/package/opencv3/opencv3.mk
index cffe66b892..15e4eadfe3 100644
--- a/package/opencv3/opencv3.mk
+++ b/package/opencv3/opencv3.mk
@@ -327,6 +327,7 @@ OPENCV3_CONF_OPTS += \
 	-DPYTHON3_NUMPY_VERSION=$(PYTHON_NUMPY_VERSION)
 OPENCV3_DEPENDENCIES += python3
 endif
+OPENCV3_CONF_ENV += $(PKG_PYTHON_DISTUTILS_ENV)
 OPENCV3_DEPENDENCIES += python-numpy
 else
 OPENCV3_CONF_OPTS += \

^ permalink raw reply related	[flat|nested] 2+ messages in thread

* [Buildroot] [git commit] opencv3: fix Python module build for Python 3.x
  2018-04-01  8:46 [Buildroot] [git commit] opencv3: fix Python module build for Python 3.x Thomas Petazzoni
@ 2018-04-11 15:47 ` Peter Korsgaard
  0 siblings, 0 replies; 2+ messages in thread
From: Peter Korsgaard @ 2018-04-11 15:47 UTC (permalink / raw)
  To: buildroot

>>>>> "Thomas" == Thomas Petazzoni <thomas.petazzoni@bootlin.com> writes:

 > commit: https://git.buildroot.net/buildroot/commit/?id=8ba80282c3bb580c6a45ea114e70acac98fe1690
 > branch: https://git.buildroot.net/buildroot/commit/?id=refs/heads/master

 > When the OpenCV3 Python support is enabled with Python 3.x, it builds
 > properly, and the resulting .so file is built for the target
 > architecture, but its name is wrong:

 >   output/target/usr/lib/python3.6/site-packages/cv2.cpython-36m-x86_64-linux-gnu.so

 > This prevents Python 3.x from importing the module:

 >>>> import cv2
 > Traceback (most recent call last):
 >   File "<stdin>", line 1, in <module>
 > ModuleNotFoundError: No module named 'cv2'

 > In order to fix this, we simply need to pass PKG_PYTHON_DISTUTILS_ENV
 > in the environment. The Python module then gets named:

 >   output/target/usr/lib/python3.6/site-packages/cv2.cpython-36m-arm-linux-gnueabi.so

 > And can be imported properly:

 >>>> import cv2
 >>>> 

 > This solution was suggested by Arnout Vandecappelle in
 > https://stackoverflow.com/questions/49059035/buildroot-opencv3-python-package-builds-for-the-wrong-target.

 > With Python 2.x, the module is named just cv2.so so this problem isn't
 > visible. However, for consistency, we also pass
 > PKG_PYTHON_DISTUTILS_ENV when building against Python 2.x, by putting
 > the OPENCV3_CONF_ENV assignment inside the
 > BR2_PACKAGE_OPENCV3_LIB_PYTHON condition, but outside the
 > BR2_PACKAGE_PYTHON3/BR2_PACKAGE_PYTHON condition.

 > Signed-off-by: Sasha Shyrokov <alexander-shyrokov@idexx.com>
 > [Thomas: extend the commit log, apply the solution to Python 2.x.]
 > Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>

Committed to 2017.02.x, thanks.

-- 
Bye, Peter Korsgaard

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2018-04-11 15:47 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-04-01  8:46 [Buildroot] [git commit] opencv3: fix Python module build for Python 3.x Thomas Petazzoni
2018-04-11 15:47 ` Peter Korsgaard

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.