Как я могу установить Python 2.7 из исходного кода с помощью модуля fpectl?

Я пытаюсь установить Python 2.7.14 из исходного кода внутри контейнера Docker с fpectl модуль включен.

Используя официальный Python Джесси Докерфайл в качестве отправной точки, я добавил --with-fpectl вариант конфигурации для ./configure команда.

Вы можете увидеть полный вывод моей команды сборки docker в этом гисте; Тем не менее, вот несколько интересных моментов:

./configure --build=x86_64-linux-gnu --enable-shared --enable-unicode=ucs4 --with-fpectl
...
checking for --with-fpectl... yes
...
x86_64-linux-gnu-gcc -pthread -fPIC -fno-strict-aliasing -Wdate-time -D_FORTIFY_SOURCE=2 -g -fstack-protector-strong -Wformat -Werror=format-security -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -I. -IInclude -I./Include -I/usr/include/x86_64-linux-gnu -I/usr/local/include -I/usr/src/python/Include -I/usr/src/python -c /usr/src/python/Modules/mathmodule.c -o build/temp.linux-x86_64-2.7/usr/src/python/Modules/mathmodule.o
In file included from Include/Python.h:156:0,
             from /usr/src/python/Modules/mathmodule.c:55:
/usr/src/python/Modules/mathmodule.c: In function ‘math_fsum’:
Include/pyfpe.h:164:64: warning: passing argument 1 of ‘PyFPE_dummy’ discards ‘volatile’ qualifier from pointer target type [-Wdiscarded-qualifiers]
 #define PyFPE_END_PROTECT(v) PyFPE_counter -= (int)PyFPE_dummy(&(v));
                                                                ^
/usr/src/python/Modules/mathmodule.c:1072:5: note: in expansion of macro ‘PyFPE_END_PROTECT’
     PyFPE_END_PROTECT(hi)
     ^
Include/pyfpe.h:134:15: note: expected ‘void *’ but argument is of type ‘volatile double *’
 extern double PyFPE_dummy(void *);
               ^
...
Python build finished, but the necessary bits to build these modules were not found:
bsddb185           dl                 imageop         
sunaudiodev                                           
To find the necessary bits, look in setup.py in detect_modules() for the module's name.

(Я действительно думаю, что сообщение об ошибке от mathmodule.c доброкачественный, но я подумал, что я бы включил его для контекста, так как это единственный другой вывод, который, кажется, связан с fpectl модуль).

Когда я раскручиваю контейнер с изображением, созданным этой сборкой, у меня есть работающая установка Python, но нет fpectl модуль:

docker run -it <IMAGE ID> /bin/bash

root@54895ad345bb:/# python

Python 2.7.14 (default, Nov 16 2017, 02:12:20)
[GCC 4.9.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.

>>> import fpectl
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named fpectl

>>> import sysconfig
>>> print(sysconfig.get_config_var('CONFIG_ARGS'))
'--build=x86_64-linux-gnu' '--enable-shared' '--enable-unicode=ucs4' '--with-fpectl' 'build_alias=x86_64-linux-gnu'

>>> help("modules")

Please wait a moment while I gather a list of all available modules...

BaseHTTPServer      ast                 imghdr              sha
Bastion             asynchat            imp                 shelve
CDROM               asyncore            importlib           shlex
CGIHTTPServer       atexit              imputil             shutil
Canvas              audiodev            inspect             signal
ConfigParser        audioop             io                  site
Cookie              base64              itertools           smtpd
DLFCN               bdb                 json                smtplib
Dialog              binascii            keyword             sndhdr
DocXMLRPCServer     binhex              lib2to3             socket
FileDialog          bisect              linecache           spwd
FixTk               bsddb               linuxaudiodev       sqlite3
HTMLParser          bz2                 locale              sre
IN                  cPickle             logging             sre_compile
MimeWriter          cProfile            macpath             sre_constants
Queue               cStringIO           macurl2path         sre_parse
ScrolledText        calendar            mailbox             ssl
SimpleDialog        cgi                 mailcap             stat
SimpleHTTPServer    cgitb               markupbase          statvfs
SimpleXMLRPCServer  chunk               marshal             string
SocketServer        cmath               math                stringold
StringIO            cmd                 md5                 stringprep
TYPES               code                mhlib               strop
Tix                 codecs              mimetools           struct
Tkconstants         codeop              mimetypes           subprocess
Tkdnd               collections         mimify              sunau
Tkinter             colorsys            mmap                sunaudio
UserDict            commands            modulefinder        symbol
UserList            compileall          multifile           symtable
UserString          compiler            multiprocessing     sys
_LWPCookieJar       contextlib          mutex               sysconfig
_MozillaCookieJar   cookielib           netrc               syslog
__builtin__         copy                new                 tabnanny
__future__          copy_reg            nis                 tarfile
_abcoll             crypt               nntplib             telnetlib
_ast                csv                 ntpath              tempfile
_bisect             ctypes              nturl2path          termios
_bsddb              curses              numbers             textwrap
_codecs             datetime            opcode              this
_codecs_cn          dbhash              operator            thread
_codecs_hk          dbm                 optparse            threading
_codecs_iso2022     decimal             os                  time
_codecs_jp          difflib             os2emxpath          timeit
_codecs_kr          dircache            ossaudiodev         tkColorChooser
_codecs_tw          dis                 parser              tkCommonDialog
_collections        distutils           pdb                 tkFileDialog
_csv                doctest             pickle              tkFont
_ctypes             dumbdbm             pickletools         tkMessageBox
_ctypes_test        dummy_thread        pip                 tkSimpleDialog
_curses             dummy_threading     pipes               toaiff
_curses_panel       easy_install        pkg_resources       token
_elementtree        email               pkgutil             tokenize
_functools          encodings           platform            trace
_hashlib            ensurepip           plistlib            traceback
_heapq              errno               popen2              ttk
_hotshot            exceptions          poplib              tty
_io                 fcntl               posix               turtle
_json               filecmp             posixfile           types
_locale             fileinput           posixpath           unicodedata
_lsprof             fnmatch             pprint              unittest
_multibytecodec     formatter           profile             urllib
_multiprocessing    fpformat            pstats              urllib2
_osx_support        fractions           pty                 urlparse
_pyio               ftplib              pwd                 user
_random             functools           py_compile          uu
_socket             future_builtins     pyclbr              uuid
_sqlite3            gc                  pydoc               virtualenv
_sre                gdbm                pydoc_data          virtualenv_suppor
_ssl                genericpath         pyexpat             warnings
_strptime           getopt              quopri              wave
_struct             getpass             random              weakref
_symtable           gettext             re                  webbrowser
_sysconfigdata      glob                readline            wheel
_testcapi           grp                 repr                whichdb
_threading_local    gzip                resource            wsgiref
_tkinter            hashlib             rexec               xdrlib
_warnings           heapq               rfc822              xml
_weakref            hmac                rlcompleter         xmllib
_weakrefset         hotshot             robotparser         xmlrpclib
abc                 htmlentitydefs      runpy               xxsubtype
aifc                htmllib             sched               zipfile
antigravity         httplib             select              zipimport
anydbm              idlelib             sets                zlib
argparse            ihooks              setuptools
array               imaplib             sgmllib

Дополнительные примечания

  • Я знаю, что использование fpectl модуль не рекомендуется, и он не присутствует в сборках Python в комплекте с официальными образами Python Docker; однако, это требование для моего варианта использования (в частности, работоспособность с модулем Cython, скомпилированным с установкой Python с использованием --with-fpectl подробнее здесь и тут).

  • Похоже, python пакет, доступный через aptly , включает в себя fpectl модуль (см. ниже). Однако в этом случае я бы предпочел собрать из исходного кода по разным причинам (включая возможность использовать последнюю версию 2.7.x). Я попытался проверить параметры конфигурации, используемые для установки пакета Python, но использование этих параметров в моей собственной сборке Docker, похоже, также не устанавливает модуль.

Установка через apt:

root@54895ad345bb:/# apt-get install -y python
...
root@54895ad345bb:/# /usr/bin/python

Python 2.7.9 (default, Jun 29 2016, 13:08:31)
[GCC 4.9.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.

>>> import fpectl
# no import error!

>>> import sysconfig
>>> print(sysconfig.get_config_var('CONFIG_ARGS'))
'--enable-shared' '--prefix=/usr' '--enable-ipv6' '--enable-unicode=ucs4' '--with-dbmliborder=bdb:gdbm' '--with-system-expat' '--with-system-ffi' '--with-fpectl' 'CC=x86_64-linux-gnu-gcc' 'CFLAGS=-D_FORTIFY_SOURCE=2 -g -fstack-protector-strong -Wformat -Werror=format-security ' 'LDFLAGS=-Wl,-z,relro'

С учетом всего сказанного, чего мне не хватает? Требуется ли какой-то дополнительный системный пакет для включения этого модуля или какие-то дополнительные флаги требуются на этапе настройки?

0 ответов

Другие вопросы по тегам