从源代码安装Python时出现问题,即使安装了openssl,SSL包也会丢失

pftdvrlh  于 2023-01-31  发布在  Python
关注(0)|答案(1)|浏览(216)

问题

尝试在Zorin OS(基于Ubuntu 16)上从源代码安装Python-3.11.1,当我尝试将任何包pip安装到新创建的venv时,我得到了以下错误:

python3.11 -m venv venv
source venv/bin/active
pip install numpy
WARNING: pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.
WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError("Can't connect to HTTPS URL because the SSL module is not available.")': /simple/numpy/
WARNING: Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError("Can't connect to HTTPS URL because the SSL module is not available.")': /simple/numpy/
WARNING: Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError("Can't connect to HTTPS URL because the SSL module is not available.")': /simple/numpy/
WARNING: Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError("Can't connect to HTTPS URL because the SSL module is not available.")': /simple/numpy/
WARNING: Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError("Can't connect to HTTPS URL because the SSL module is not available.")': /simple/numpy/
Could not fetch URL https://pypi.org/simple/numpy/: There was a problem confirming the ssl certificate: HTTPSConnectionPool(host='pypi.org', port=443): Max retries exceeded with url: /simple/numpy/ (Caused by SSLError("Can't connect to HTTPS URL because the SSL module is not available.")) - skipping
ERROR: Could not find a version that satisfies the requirement numpy (from versions: none)
ERROR: No matching distribution found for numpy

很明显,SSL包似乎丢失了,但是我确保在安装python之前安装了openssllibssl-dev,更具体地说,我确保安装了所有的包lined out here

我安装的确切步骤

1.确保安装了所需的所有软件包(上述一项)

  1. cd .../python-installs
    1.从python.org下载Python
  2. tar -xvzf Python-3.11.1.tgz
  3. cd Python-3.11.1然后
./configure \
    --prefix=/opt/python/3.11.1 \
    --enable-shared \
    --enable-optimizations \
    --enable-ipv6 \
    --with-openssl=/usr/lib/ssl \ 
    --with-openssl-rpath=auto \ 
    LDFLAGS=-Wl,-rpath=/opt/python/3.11.1/lib,--disable-new-dtags
  1. make〈-注意,我在这里从gcc得到了很多错误消息,与this非常相似,但它似乎在最后是成功的
  2. make altinstall
    此安装过程的部分内容来自1(https://docs.posit.co/resources/install-python-source/),[2]
    运行python3.11看起来工作正常,但是我不能pip安装任何东西到由Python3.11.1创建的venv中。

其他可能的错误源

在尝试重新安装Python3.11.1之前,我总是确保删除以下位置中与Python3.11.1关联的所有文件:

/usr/local/bin/...
/usr/local/lib/...
/usr/local/man/man1/...
/usr/local/share/man/man1/...
/usr/local/lib/pkgconfig/...
/opt/python/...

我还尝试将Python-3.11.1添加到PATH中

PATH=/opt/python/3.11.1/bin:$PATH

/etc/profile.d/python.sh,但在我的情况下似乎没有多大作用。
当配置python文件夹时,我使用--with-openssl=/usr/lib/ssl,尽管我可能需要使用其他的东西,我尝试了--with-openssl=/usr/bin/openssl,但它不起作用,因为openssl是一个文件而不是一个文件夹,它给我一个错误消息,甚至没有配置任何东西。

结论

通过我的研究,我发现大多数时候这个错误与openssl库没有安装有关(假设python版本〉= 3.10需要安装它),安装它并重新安装python似乎可以解决这个问题,但是在我的例子中却没有,我不知道为什么。
最可能的原因是我的openssl配置出了问题,但我不知道是什么问题。
任何帮助都将不胜感激。

2w3kk1z5

2w3kk1z51#

经过更多的研究,我意识到我没有安装libbz2-dev,这显然是第一件事,一个人应该检查,如果他们得到以上的错误,但哦好吧。对于任何人谁仍然发现自己的挣扎,这里是我的完整步骤,我采取了:
1.确保安装了以下库

apt show libbz2-dev
apt show openssl
apt show libssl-dev
# Other libraries that might also be needed
apt show liblzma-dev
  1. cd .../python-installs
    1.从python.org下载目标Python版本作为Gzipped tar ball
  2. tar -xvzf Python-3.11.1.tgz
  3. sudo mkdir opt/python
  4. sudo mkdir opt/python/3.11.1
  5. cd Python-3.11.1然后
./configure --prefix=/opt/python/3.11.1 \
    --enable-optimizations
  1. make〈-注意,我仍然从gcc得到很多错误消息,也得到always_inline not in line错误消息
  2. sudo make altinstall
    1.将PATH=/opt/python/3.11.1/bin:$PATH添加到文件/etc/profile.d/python.sh
  3. x1米11米1x
    然后,为了测试错误是否消失,可以例如测试:
  4. python3.11 -m venv venv
  5. source venv/bin/active
  6. pip install pandas
  7. python3.11
  8. import pandas
  9. exit()
    如果没有错误,那么一切都解决了。显然,版本需要更改为您的实际目标版本。

注解

如果你新安装的python版本没有出现在终端中,可能是因为文件/etc/profile.d/python.sh已经存在,路径指向python版本(例如,如果你必须安装它多次)。在这种情况下,删除文件(或至少是目标版本的路径),然后重新创建它。重新启动后,它应该出现在终端中。

相关问题