Как правильно упаковать .py в .exe?
Ну судя по ошибке - telebot не может найти файл сертификата SSL.
Дело все в том, что при запуске exe, созданного pyinstaller, сначала все содержимое распаковывается во временную папку, а затем запускается из нее, соответственно путь другой.
Поэтому что можно сделать в вашем случае:
файл SSL добавить в упаковку pyinstaller, с помощью опции --add-data. Пример:
pyinstaller -F --add-data ssl;. main.py
Где:
ssl - файл сертификата;
. - точка означает текущий каталог, это если файл сертификата лежит в корне со скриптом.
Затем в самом скрипте надо добавить следующий код:import os
import sys
def resource_path(relative_path):
    """ Get absolute path to resource, works for dev and for PyInstaller """
    if getattr(sys, 'frozen', False):
        base_path = sys._MEIPASS
    else:
        base_path = os.getcwd()
    return os.path.join(base_path, relative_path)
Затем в том коде, где вы передаете данный файл боту, надо задавать его через данную функцию.
Попробуй cx_freeze.python -m pip install cx_freeze
Далее создай файл setup.py и внеси в него следующий код:import some_module
from cx_Freeze import setup, Executable

executables = [Executable('example.py')]

setup(name='hello_world',
      version='0.0.1',
      description='My Hello World App!',
      executables=executables)
В начале импортируй все модули, которые использует твоя программа.
Далее запускай консоль и пиши:python setup.py build