2017-09-06 54 views
1

我想通过buildroot安装我的python 2.7安装的subprocess32。它似乎正确安装,但是当我将其导入嵌入式系统上我得到一个错误:问题导入子进程32

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

subprocess32似乎有它自己的版本,它的在这种情况下不工作?

这里是我的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)) 

有关于这Python Error The _posixsubprocess module is not being used但是答案是它是死的评论链接一个类似的帖子。我的问题有什么想法?

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='[email protected]', 
     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() 

回答

0

问题是distutils正在使用错误的编译器来构建共享对象(其他对象使用了正确的编译器)。在构建阶段设置如下LDSHARED变量来解决这个问题:

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

我不知道你使用的Buildroot里面的版本,但如果它仍然使用了GENTARGETS宏版本和不具备python-package基础设施,然后它必须是一个真正的,真正的旧版本。请先升级,最近几年在Python支持中已经提供了许多修复程序。

+0

说实话,我甚至不知道它是什么版本的buildroot的,是的,它是旧的,但升级它不是现在的选项。我不确定问题是否与它或subprocess32一样。这个重大变化会引起许多其他问题,我想也是如此。 – Paul