Subprocess import import32

I am trying to install subprocess32 with my python 2.7 installation via buildroot. It appeared to install correctly, but when I import it into the embedded system, I get an error message:

>>> import subprocess32 /usr/lib/python2.7/site-packages/subprocess32.py:472: RuntimeWarning: The _posixsubprocess module is not being used. Child process reliability may suffer if your pro gram uses threads. "program uses threads.", RuntimeWarning) 

Following this path, I tried to import _posixsubprocess

 import _posixsubprocess Traceback (most recent call last): File "<stdin>", line 1, in <module> ImportError: dynamic module does not define init function (init_posixsubprocess) 

subprocess32 seems to have its own version and doesn't work in this case?

Here is my make file:

 ############################################################# # # Subprocess32 module for python # ############################################################# SUBPROCESS32_VERSION = 3.2.7 SUBPROCESS32_SOURCE = subprocess32-$(SUBPROCESS32_VERSION).tar.gz SUBPROCESS32_SITE = https://pypi.python.org/pypi/subprocess32 SUBPROCESS32_DEPENDENCIES = python define SUBPROCESS32_BUILD_CMDS (cd $(@D); $(HOST_DIR)/usr/bin/python setup.py build) endef define SUBPROCESS32_INSTALL_TARGET_CMDS (cd $(@D); $(HOST_DIR)/usr/bin/python setup.py install --prefix=$(TARGET_DIR)/usr) endef $(eval $(call GENTARGETS,package,subprocess32)) 

There is a similar article about this Python error. The _posixsubprocess module is not used. However, the answer is a link in dead comments. Any ideas for my problem?

setup.py:

 #!/usr/bin/python import os import sys from distutils.core import setup, Extension def main(): if sys.version_info[0] != 2: sys.stderr.write('This backport is for Python 2.x only.\n') sys.exit(1) ext = Extension('_posixsubprocess', ['_posixsubprocess.c'], depends=['_posixsubprocess_helpers.c']) if os.name == 'posix': ext_modules = [ext] else: ext_modules = [] setup( name='subprocess32', version='3.2.7', description='A backport of the subprocess module from Python 3.2/3.3 for use on 2.x.', long_description=""" This is a backport of the subprocess standard library module from Python 3.2 & 3.3 for use on Python 2. It includes bugfixes and some new features. On POSIX systems it is guaranteed to be reliable when used in threaded applications. It includes timeout support from Python 3.3 but otherwise matches 3.2 API. It has not been tested on Windows.""", license='PSF license', maintainer='Gregory P. Smith', maintainer_email=' greg@krypto.org ', url='https://github.com/google/python-subprocess32', ext_modules=ext_modules, py_modules=['subprocess32'], classifiers=[ 'Intended Audience :: Developers', 'Topic :: Software Development :: Libraries', 'Development Status :: 5 - Production/Stable', 'License :: OSI Approved :: Python Software Foundation License', 'Operating System :: POSIX', 'Operating System :: POSIX :: BSD', 'Operating System :: POSIX :: Linux', 'Operating System :: POSIX :: SunOS/Solaris', 'Programming Language :: Python :: 2.4', 'Programming Language :: Python :: 2.5', 'Programming Language :: Python :: 2.6', 'Programming Language :: Python :: 2.7', 'Programming Language :: Python :: 2 :: Only', 'Programming Language :: Python :: Implementation :: CPython', ], ) if __name__ == '__main__': main() 
+1
source share
2 answers

The problem was that distutils used the wrong compiler to create shared objects (other objects used the correct compiler). Setting the LDSHARED variable LDSHARED at build time solved the problem:

  LDSHARED="$(TARGET_CC) -pthread -shared" 
0
source

I'm not sure which version of Buildroot you are using, but if it is still a version that uses the GENTARGETS macro and which does not have the python-package infrastructure, then this must be a really, really old version. Upgrade first, so many fixes have been made in recent years in Python support.

0
source

Source: https://habr.com/ru/post/1435219/


All Articles