Skip to content

Legacy singbox protobuf gencode prevents further loading #9

@hexaphaseIce

Description

@hexaphaseIce

Describe the bug
Hi team hiddify,
It's an awesome xtlsapi you created. It works well on windows, but there were issues when I tried to deploy it on docker. I encountered the following problem in python:alpine container, causing the container to fail to start:

>>> from xtlsapi import XrayClient
Traceback (most recent call last):
  File "<python-input-0>", line 1, in <module>
    from xtlsapi import XrayClient
  File "/usr/local/lib/python3.13/site-packages/xtlsapi/__init__.py", line 2, in <module>
    from xtlsapi.client.SingboxClient import SingboxClient
  File "/usr/local/lib/python3.13/site-packages/xtlsapi/client/SingboxClient.py", line 3, in <module>
    from xtlsapi.singbox_api_services import APIService
  File "/usr/local/lib/python3.13/site-packages/xtlsapi/singbox_api_services/__init__.py", line 1, in <module>
    from .stats import StatsAPIService
  File "/usr/local/lib/python3.13/site-packages/xtlsapi/singbox_api_services/stats/__init__.py", line 1, in <module>
    from .get_client_upload_traffic import GetClientUploadTraffic
  File "/usr/local/lib/python3.13/site-packages/xtlsapi/singbox_api_services/stats/get_client_upload_traffic.py", line 2, in <module>
    from xtlsapi.singbox_api import stats_pb2
  File "/usr/local/lib/python3.13/site-packages/xtlsapi/singbox_api/stats_pb2.py", line 14, in <module>
    from . import extensions_pb2 as extensions__pb2
  File "/usr/local/lib/python3.13/site-packages/xtlsapi/singbox_api/extensions_pb2.py", line 22, in <module>
    google_dot_protobuf_dot_descriptor__pb2.MessageOptions.RegisterExtension(message_opt)
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: type object 'MessageOptions' has no attribute 'RegisterExtension'

This seems to be related to mlflow/mlflow#11811. Legacy singbox protobuf gencode prevents further loading when using protobuf without C descriptors, even if not singbox module is imported.

To Reproduce
It's easy to reproduce:

docker run -it python:alpine /bin/sh
pip install xtlsapi
from xtlsapi import XrayClient

Expected behavior
Upgrade singbox protobuf gencode, or lazy import singbox part.

Desktop (please complete the following information):

  • docker image python:3.13.2-alpine3.21
  • OS: Alpine Linux 3.21
  • Python 3.13.2
  • using protobuf without C descriptors, like protobuf-5.28.3-py3-none-any.whl

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workinghelp wantedExtra attention is needed

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions