简体   繁体   English

问题导入子流程32

[英]Issue importing subprocess32

I am trying to install subprocess32 with my python 2.7 installation via buildroot. 我正在尝试通过buildroot在我的python 2.7安装中安装subprocess32。 It appeared to install correctly but when I import it on the embedded system I get an error: 它似乎安装正确,但是当我将其导入嵌入式系统时出现错误:

>>> 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 按照此路径,我尝试导入_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 it's own version and it's not working in this case? subprocess32似乎有它自己的版本,在这种情况下不起作用?

Here is my make file: 这是我的make文件:

#############################################################
#
# 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 post about this Python Error The _posixsubprocess module is not being used However the answer is a link in the comments which is dead. 关于此Python错误,也有类似的帖子。_posixsubprocess模块​​未使用,但是答案是注释中的链接已失效。 Any ideas for my problem? 对我的问题有什么想法吗?

setup.py: 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'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()

I'm not sure which Buildroot version you're using, but if it's still a version that uses the GENTARGETS macro and that doesn't have the python-package infrastructure, then it must be a really, really, really old version. 我不确定您使用的是哪个Buildroot版本,但是如果它仍然是使用GENTARGETS宏且没有python-package基础结构的版本,则它必须是真的,真的,真的旧版本。 Please upgrade first, as many, many fixes have been made in recent years in the Python support. 请先升级,因为近年来在Python支持中已进行了许多修复。

The issue was that distutils was using the wrong compiler for building shared objects (other objects used the right compiler). 问题是distutils使用错误的编译器来构建共享库(其他对象使用正确的编译器)。 Setting the below LDSHARED variable during the build phase solved the issue: 在构建阶段设置下面的LDSHARED变量可以解决此问题:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM