5

curses をサポートする Python をコンパイルしてインストールする試みは失敗し、コンパイル フラグなどでさまざまな反復を試みましたが、これを機能させることができないようです。

これは、Solaris 11、Python バージョン 3.4.3 上にあります。

まず、問題は次のとおりです。

Python 3.4.3 (default, Mar  3 2015, 14:43:41) 
[GCC 4.5.2] on sunos5
Type "help", "copyright", "credits" or "license" for more information.
>>> import curses
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/pkg/python/3.4.3/lib/python3.4/curses/__init__.py", line 13, in <module>
    from _curses import *
ImportError: No module named '_curses'

さまざまな Googlez が、これは Python がコンパイルされたときに ncurses ライブラリが見つからなかったことが原因であると私に言いました。

そこで、ftp: //ftp.gnu.org/gnu/ncurses/ (5.9) から /usr/local/pkg/ncurses/5.9 にcurses をインストールし、ncurses の場所を渡して Python を再コンパイルしようとしました。

export LDFLAGS=-L/usr/local/pkg/ncurses/5.9/lib
export CPPFLAGS="-I/usr/local/pkg/ncurses/5.9/include -I/usr/local/pkg/ncurses/5.9/include/ncurses"
./configure --enable-shared --prefix=/usr/local/pkg/python/3.4.3
make
make install

これはそれを行う必要があるようです。config.log は失敗を示していないようです。

checking curses.h usability... yes
checking curses.h presence... yes
checking for curses.h... yes
checking ncurses.h usability... yes
checking ncurses.h presence... yes
checking for ncurses.h... yes

また、Solaris パッケージ ツール OpenCSW を使用してこれらのパッケージをインストールしようとしました。

libncurses5          CSWlibncurses5       5.9,REV=2011.11.21         298.2 KB
libncurses_dev       CSWlibncurses-dev    5.9,REV=2011.11.21         258.4 KB
libncursesw5         CSWlibncursesw5      5.9,REV=2011.11.21         341.5 KB
mutt_ncurses         CSWmutt-ncurses      1.5.23,REV=2014.03.14      484.4 KB
ncurses              CSWncurses           5.9,REV=2011.11.21         123.1 KB

そして、私は試しました:

export LDFLAGS=-L/opt/csw/lib
export CPPFLAGS="-I/opt/csw/include -I/opt/csw/include/ncursesw"
./configure --enable-shared --prefix=/usr/local/pkg/python/3.4.3
make
make install

どちらの場合も、同じ状況:

ImportError: No module named '_curses'

編集の更新:

「make」ではなく「make install」中にcursesモジュールがビルドされることに気付いたので、いくつかの重大なエラーを見逃していました。具体的には、ncurses の /usr/local/pkg インストールを使用する場合:

building '_curses' extension
gcc -fPIC -Wno-unused-result -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -Werror=declaration-after-statement -I./Include -I. -IInclude -I/usr/local/pkg/ncurses/5.9/include -I/usr/local/pkg/ncurses/5.9/include/ncurses -I/usr/local/include -I/tmp/Python-3.4.3/Include -I/tmp/Python-3.4.3 -c /tmp/Python-3.4.3/Modules/_cursesmodule.c -o build/temp.solaris-2.11-i86pc.32bit-3.4/tmp/Python-3.4.3/Modules/_cursesmodule.o
gcc -shared -L/usr/local/pkg/ncurses/5.9/lib -L/usr/local/pkg/ncurses/5.9/lib -L/usr/local/pkg/ncurses/5.9/lib -I/usr/local/pkg/ncurses/5.9/include -I/usr/local/pkg/ncurses/5.9/include/ncurses build/temp.solaris-2.11-i86pc.32bit-3.4/tmp/Python-3.4.3/Modules/_cursesmodule.o -L. -L/usr/local/pkg/python/3.4.3/lib -L/usr/local/pkg/ncurses/5.9/lib -L/usr/local/lib -lncurses -lpython3.4m -o build/lib.solaris-2.11-i86pc.32bit-3.4/_curses.so
Text relocation remains                         referenced
    against symbol                  offset      in file
.rodata (section)                   0x50        /usr/local/pkg/ncurses/5.9/lib/libncurses.a(lib_color.o)
... (followed by hundreds more lines like the above)
ld: fatal: relocations remain against allocatable but non-writable sections
collect2: ld returned 1 exit status

Failed to build these modules:
_curses               _curses_panel         readline

特に ncurses の OpenCSW インストールを使用する場合:

building '_curses' extension
gcc -fPIC -Wno-unused-result -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -Werror=declaration-after-statement -DHAVE_NCURSESW=1 -I/usr/include/ncursesw -I./Include -I. -IInclude -I/opt/csw/include -I/opt/csw/include/ncursesw -I/usr/local/include -I/tmp/Python-3.4.3/Include -I/tmp/Python-3.4.3 -c /tmp/Python-3.4.3/Modules/_cursesmodule.c -o build/temp.solaris-2.11-i86pc.32bit-3.4/tmp/Python-3.4.3/Modules/_cursesmodule.o
/tmp/Python-3.4.3/Modules/_cursesmodule.c:281:29: error: expected declaration specifiers or ‘...’ before ‘cchar_t’
/tmp/Python-3.4.3/Modules/_cursesmodule.c: In function ‘PyCurses_ConvertToCchar_t’:
/tmp/Python-3.4.3/Modules/_cursesmodule.c:299:16: error: ‘wch’ undeclared (first use in this function)
/tmp/Python-3.4.3/Modules/_cursesmodule.c:299:16: note: each undeclared identifier is reported only once for each function it appears in
/tmp/Python-3.4.3/Modules/_cursesmodule.c: In function ‘curses_window_addch_impl’:
(...and many more messages like this)

Failed to build these modules:
_curses               _curses_panel         readline
4

2 に答える 2

2

最初に投稿したとき、「--with-shared」で ncurses をコンパイルしていませんでした。そのオプションを指定して ncurses を再コンパイルした後、これは機能しました。

export LDFLAGS=-L/usr/local/pkg/ncurses/5.9/lib
export CPPFLAGS="-I/usr/local/pkg/ncurses/5.9/include -I/usr/local/pkg/ncurses/5.9/include/ncurses"
./configure --enable-shared --prefix=/usr/local/pkg/python/3.4.3
make
make install

¯\_(ツ)_/¯

于 2015-03-06T17:55:20.697 に答える
0

車輪の再発明に熱心なようです。NetBSD のPKGSRCを参照することをお勧めします。これは Solaris と互換性があり、最近では非常にうまく機能します... SUN Studio コンパイラーでも動作します。Solaris 11 ですぐに使用できる SmartOS/Illumos 用のバイナリ パッケージがあります (x86 の場合)。

このパッケージングにはいくつかのパッチがあり、autotools configure 後に Makefile にパッチを適用し、偽のgcc, ld,asコマンドを PATH に挿入します。これは、実際のコンパイラの cmdline パラメータを変更するスクリプトです。本当にすべてを再発明したいですか?

于 2015-03-06T13:29:36.963 に答える