我正试图通过buildroot在python 2.7安装中安装subprocess32。它似乎安装正确,但当我将其导入到嵌入式系统时,出现了一个错误:

>>> 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)

按照此路径,我尝试导入posixsubprocess
import _posixsubprocess
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: dynamic module does not define init function (init_posixsubprocess)

子流程32似乎有自己的版本,在这种情况下它不起作用?
这是我的制作文件:
#############################################################
#
# 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))

关于这个Python Error The _posixsubprocess module is not being used也有类似的帖子,但是答案是评论中的一个链接,这个链接已经死了。对我的问题有什么想法吗?
设置.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's 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()

最佳答案

我不确定您使用的是哪个buildroot版本,但是如果它仍然是一个使用GENTARGETS宏的版本,并且没有python-package基础结构,那么它一定是一个真正的、真正的、真正的旧版本。请先升级,因为最近几年在python支持方面已经做了很多修复。

10-08 07:56
查看更多