我正在尝试在Sparc Solaris 10机器上编译python 2.7.9。我已成功安装它,但_ssl:
除外Python build finished, but the necessary bits to build these modules were not found:
_bsddb _ssl _tkinter
bsddb185 gdbm linuxaudiodev
ossaudiodev
安装了OpenSSL,libs和includes包含在这里:
此处的库:/usr/sfw/lib
并在此处包含:/usr/sfw/include/openssl
libs是:
lrwxrwxrwx 1 root root 17 May 16 2014 libssl.so -> ./libssl.so.0.9.7
-rwxr-xr-x 1 root bin 1424312 Jun 27 2013 libssl.so.0.9.7
-rwxr-xr-x 1 root bin 151540 Jun 27 2013 libssl_extra.so.0.9.7
-rw-r--r-- 1 root bin 293 Jan 22 2005 llib-lssl
-rw-r--r-- 1 root bin 279739 Jun 21 2013 llib-lssl.ln
因此,经过一些研究后,似乎python只检查标准路径中是否存在lib:
e.g。 /usr/local/ssl/lib
& /usr/local/ssl/include
解决它的过程是(我相信)在源代码树中编辑setup.py并添加这些部分的路径,如:
ssl_libs = find_library_file(self.compiler, 'ssl',lib_dirs,
['/usr/sfw/lib',
'/usr/local/ssl/lib',
'/usr/contrib/ssl/lib/'
] )
...和...
search_for_ssl_incs_in = [
'/usr/sfw/include/openssl',
'/usr/local/ssl/include',
'/usr/contrib/ssl/include/'
]
我正在清理,然后再次运行此配置:
./configure --prefix=/opt/python-2.7.9 --enable-shared
...然后使用dmake
重新编译。
仍然无法找到libs。我的解决方法是正确的吗?
非常感谢。
答案 0 :(得分:1)
除了Joey Wilhelm的回应,
如果你正在编译python 2.7.9或任何其他版本(比如我在python 2.7.12上)。
您的机器应该出现某些必需的依赖项:
如果是ubuntu:
apt-get install libreadline -gplv2-dev libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev -y
以上命令下载所需的依赖项
您的计算机上应该存在等效依赖项。 如果它们不存在,请使用以下链接进行下载。 (确保可以访问互联网)
/usr/sbin/pkgadd -d http://get.opencsw.org/now
/opt/csw/bin/pkgutil -U
为ubuntu加载上面提到的(https://www.opencsw.org/package/python/)和其他依赖项的所有依赖项。这些包可在(https://www.opencsw.org/get-it/packages/)
对于openssl,要求libssl.so在路径上可用,如果没有,可以在自定义位置安装openssl。
我的自定义位置以进行额外安装:/ tmp / local
(你也可以使用标准/ usr / local,但对我来说这些位置是只读的)
curl https://www.openssl.org/source/openssl-1.0.2l.tar.gz |焦油xz&& cd openssl-1.0.2l&& ./config共享--prefix = / tmp / local /&&制造&& make install
从https://zlib.net/fossils/zlib-1.2.11.tar.gz
下载zlib tar -xvf zlib-1.2.11.tar.gz
cd zlib-1.2.11
./configure --prefix=/tmp/local
make
make install
export LDFLAGS="-L/tmp/local/lib/ -L/usr/local/lib/"
# Path /opt/csw/lib/ makes sure that required libraries that we downloaded are available to the compiler
export LD_LIBRARY_PATH="/tmp/local/lib/:/opt/csw/lib/:/usr/local/lib/"
export CPPFLAGS="-I/tmp/local/include -I/tmp/local/include/openssl"
export CFLAGS="-I/tmp/local/include -I/tmp/local/include/openssl"
wget https://www.python.org/ftp/python/2.7.12/Python-2.7.12.tgz | tar xzf Python-2.7.12.tgz && cd Python-2.7.12
./configure --prefix=/tmp/python/
make install
默认构建将是32位python。如果你想构建64位python,你需要导入相应的64位库并保持它们的路径。
注意:
64位python构建生成的重要路径是
的/ opt / CSW / LIB / SPARCV9
的/ opt / CSW / LIB / 64
在标志
中设置-m64位也很重要如果您有/usr/sfw/lib/libssl.so文件,则不需要构建自定义openssl,您可以在标志中添加/ usr / sfw / lib /和/ usr / sfw / include路径。
确保使用命令构建openssl:
cd openssl-1.0.1e
./Configure solaris64-sparcv9-cc --prefix=<path> shared
make
make install
验证64位python安装:
Python 2.7.12(默认,2017年6月6日,08:34:21)
关于sunos5的GCC 4.5.2]
导入平台
platform.architecture()
('64bit','ELF')
答案 1 :(得分:0)
事实证明,解决方案并非如此简单。它实际上是两部分。首先,您的Python构建不会在适当的位置查找SSL标头和库。那部分,我能够用这里提供的环境变量来解决:How do I compile Python 3.4 with custom OpenSSL?
第二部分是Python不再支持OpenSSL&lt; 0.9.8。所以,你将不得不升级到更新的版本。但是,看来Sunfreeware提供的是OpenSSL 1.0.1h,而unixpackages.com提供的是OpenSSL 1.0.2a,所以这些似乎是要走的路。