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