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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions