web-dev-qa-db-ja.com

Pythonビルドエラー:モジュール_sslおよび_hashlibのビルドに失敗しました

python 2.7.13をaltinstallとしてソースコードをRHEL4ボックスにインストールして、

wget --no-check-certificate https://www.python.org/ftp/python/2.7.13/Python-2.7.13.tar.xz
tar -xvzf Python2.7.13.tar.xz
cd Python2.7.13
./configure --with-ensurepip=install
make
make test
make altinstall

他の使用に必要なデフォルトのpythonを上書きしないようにします。Python 2.7.13は正常にインストールされましたが、プロジェクトに必要ないくつかのモジュールがありませんでした私は取り組んでいます。

元々、_sslおよび_haslibモジュールはこのセクションでエラーになります。

Python build finished, but the necessary bits to build these modules were not found:
_bsddb             _sqlite3           _tkinter
bsddb185           dbm                dl
gdbm               imageop            sunaudiodev

To find the necessary bits, look in setup.py in detect_modules() for the module's name.

私はopensslをインストールし、それらがpythonがそれらを探していたというデフォルトの場所にあることを確認したので、必要なビットがありますが、代わりにこのメッセージで終了します

Failed to build these modules:
_hashlib           _ssl

以下は、解凍されたpythonパッケージからのpython2.7 setup.py buildの出力全体です。私はgoogleと私が見つけることができる場所を探していましたが、これまで何にも失敗しました

running build
running build_ext
INFO: Can't locate Tcl/Tk libs and/or headers
building '_ssl' extension
gcc -pthread -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -I/usr/local/ssl/include -I. -IInclude -I./Include -I/usr/local/include -I/usr/local/include/python2.7 -c /Python/Modules/_ssl.c -o build/temp.linux-x86_64-2.7/Python/Modules/_ssl.o
/Python/Modules/_ssl.c:57: warning: ignoring #pragma GCC diagnostic
/Python/Modules/_ssl.c: In function ‘_setup_ssl_threads’:
/Python/Modules/_ssl.c:4012: warning: comparison is always false due to limited range of data type
gcc -pthread -shared build/temp.linux-x86_64-2.7/Python/Modules/_ssl.o -L/usr/local/ssl/lib -L/usr/local/lib -lssl -lcrypto -o build/lib.linux-x86_64-2.7/_ssl.so
/usr/bin/ld: /usr/local/ssl/lib/libssl.a(s3_meth.o): relocation R_X86_64_32 against `a local symbol' can not be used when making a shared object; recompile with -fPIC
/usr/local/ssl/lib/libssl.a: could not read symbols: Bad value
collect2: ld returned 1 exit status
building '_hashlib' extension
gcc -pthread -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -I/usr/local/ssl/include -I. -IInclude -I./Include -I/usr/local/include -I/usr/local/include/python2.7 -c /Python/Modules/_hashopenssl.c -o build/temp.linux-x86_64-2.7/Python/Modules/_hashopenssl.o
gcc -pthread -shared build/temp.linux-x86_64-2.7/Python/Modules/_hashopenssl.o -L/usr/local/ssl/lib -L/usr/local/lib -lssl -lcrypto -o build/lib.linux-x86_64-2.7/_hashlib.so
/usr/bin/ld: /usr/local/ssl/lib/libcrypto.a(o_names.o): relocation R_X86_64_32 against `a local symbol' can not be used when making a shared object; recompile with -fPIC
/usr/local/ssl/lib/libcrypto.a: could not read symbols: Bad value
collect2: ld returned 1 exit status

Python build finished, but the necessary bits to build these modules were not found:
_bsddb             _sqlite3           _tkinter
bsddb185           dbm                dl
gdbm               imageop            sunaudiodev
To find the necessary bits, look in setup.py in detect_modules() for the module's name.


Failed to build these modules:
_hashlib           _ssl

 running build_scripts

python 2.7.13でインストールされているpipを使用しようとすると、SSLエラーが発生するため、cx_OracleやCherryPyなどのソースからすべてのパッケージと他のモジュールをインストールしています。

pip2.7 install cffi
pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.
Collecting cffi
  Could not fetch URL https://pypi.python.org/simple/cffi/: There was a problem confirming the ssl certificate: Can't connect to HTTPS URL because the SSL module is not available. - skipping
  Could not find a version that satisfies the requirement cffi (from versions: )
No matching distribution found for cffi

私はまた、sslモジュールを手動で追加しようとしました

wget --no-check-certificate https://pypi.python.org/packages/83/21/f469c9923235f8c36d5fd5334ed11e2681abad7e0032c5aba964dcaf9bbb/ssl-1.16.tar.gz#md5=fb12d335d56f3c8c7c1fefc1c06c4bfb
tar -xvzf ssl-1.16.tar.gz
cd ssl-1.16
python2.7 setup.py build

しかし、python 2.6以降では使用しないでくださいというエラーが表示されます

Traceback (most recent call last):
  File "setup.py", line 12, in <module>
    + "or earlier.")
ValueError: This extension should not be used with Python 2.6 or later (already built in), and has not been tested with Python 2.3.4 or earlier.

[〜#〜]編集[〜#〜]

私はソリューションを探していて、setup.py buildの出力をくまなく調べたところ、openssl here に関連していると思われる同様の問題のある誰かを見つけたので、opensslを

./config enable-shared
make
make test
make install

そして今、私はsslモジュールについて少し異なるエラーを受け取りました、私は自分の環境をますます台無しにしていますか?

python2.7 setup.py build
running build
running build_ext
INFO: Can't locate Tcl/Tk libs and/or headers
building '_ssl' extension
gcc -pthread -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -I/usr/local/ssl/include -I. -IInclude -I./Include -I/usr/local/include -I/usr/local/include/python2.7 -c /Python/Modules/_ssl.c -o build/temp.linux-x86_64-2.7/Python/Modules/_ssl.o
/Python/Modules/_ssl.c:57: warning: ignoring #pragma GCC diagnostic
/Python/Modules/_ssl.c: In function ‘_setup_ssl_threads’:
/Python/Modules/_ssl.c:4012: warning: comparison is always false due to limited range of data type
gcc -pthread -shared build/temp.linux-x86_64-2.7/Python/Modules/_ssl.o -L/usr/local/ssl/lib -L/usr/local/lib -lssl -lcrypto -o build/lib.linux-x86_64-2.7/_ssl.so
*** WARNING: renaming "_ssl" since importing it failed: libssl.so.1.0.0: cannot open shared object file: No such file or directory
building '_hashlib' extension
gcc -pthread -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -I/usr/local/ssl/include -I. -IInclude -I./Include -I/usr/local/include -I/usr/local/include/python2.7 -c /Python/Modules/_hashopenssl.c -o build/temp.linux-x86_64-2.7/Python/Modules/_hashopenssl.o
gcc -pthread -shared build/temp.linux-x86_64-2.7/Python/Modules/_hashopenssl.o -L/usr/local/ssl/lib -L/usr/local/lib -lssl -lcrypto -o build/lib.linux-x86_64-2.7/_hashlib.so
*** WARNING: renaming "_hashlib" since importing it failed: libssl.so.1.0.0: cannot open shared object file: No such file or directory

Python build finished, but the necessary bits to build these modules were not found:
_bsddb             _sqlite3           _tkinter
bsddb185           dbm                dl
gdbm               imageop            sunaudiodev
To find the necessary bits, look in setup.py in detect_modules() for the module's name.


Failed to build these modules:
_hashlib           _ssl

running build_scripts

出力*** WARNING: renaming "_ssl" since importing it failed: libssl.so.1.0.0: cannot open shared object file: No such file or directoryの新しい警告メッセージは、ファイルが存在しないことを示していますが、/ usr/local/ssl/lib /にlibssl.so.1.0.0としてあり、検索で見つけることができます。

find / -name libssl.so.1.0.0
/usr/local/ssl/lib/libssl.so.1.0.0
/tmp/openssl-1.0.2l/libssl.so.1.0.0
10
stephen

まあ、私は愚かであるかどうかわからないし、これは私がLinux CLIにかなり慣れていないので、私が完全に見落としていた一般的なことです。しかし、私は_hashlibおよび_sslモジュールのビルドエラーを のいくつかの簡単な手順で解決できましたhttps://stackoverflow.com/a/28460293/8222554 amoの応答。

私は最初にldconfigを試しましたが、それでも私の問題は解決しなかったので、LD_LIBRARY_PATHの内容を単に

echo $LD_LIBRARY_PATH

そして、libssl.so.1.0.0ファイルが置かれた場所を含まないこれらの場所を取り戻しました

/usr/lib/Oracle/11.2/client64/lib:/usr/lib/Oracle/11.2/client/lib

次に、Oracleインスタントクライアントとcx_Oracleモジュールをインストールするときに以前行った手順に従いました。これらは、このブログ投稿に簡単に配置されています: https://ubuntugeeknerd.blogspot.com/2013/08/ how-to-install-oxoracle-in-rhel-64-bit.html

私がsslモジュールに使用した手順は次のとおりです

export LD_LIBRARY_PATH=/usr/local/ssl/lib/:$LD_LIBRARY_PATH >> ~/.bashrc
echo $LD_LIBRARY_PATH
/usr/local/ssl/lib/:/usr/lib/Oracle/11.2/client64/lib:/usr/lib/Oracle/11.2/client/lib

この後、私はpython2.7 setup.py clean に続く python2.7 setup.py build そして最後 python2.7 setup.py install。出力は、私が必要なビットを持っていなかったもの以外にビルドに失敗したものを返しませんでした(とにかくビルドしようとしていませんでした)。

pythonを開いてモジュールを正常にインポートするときに、sslモジュールが存在することを確認できます

Python 2.7.13 (default, Jun 26 2017, 15:21:33)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-48)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import ssl
>>>

うまくいけば、これは同様の問題に遭遇している人にとって便利でしょう

7
stephen