sterepando commited on
Commit
dff070e
·
verified ·
1 Parent(s): 53962df

Update Dockerfile

Browse files
Files changed (1) hide show
  1. Dockerfile +26 -32
Dockerfile CHANGED
@@ -1,47 +1,44 @@
1
- FROM ubuntu:22.04
 
2
 
3
- # 1. Установка системных зависимостей
4
- ENV DEBIAN_FRONTEND=noninteractive
5
  RUN apt-get update && apt-get install -y \
6
  wget \
7
  unzip \
8
  build-essential \
9
- libffi-dev \
10
- libssl-dev \
11
- git \
12
- pkg-config \
13
- python3 \
14
- python3-pip \
15
- python3-dev \
16
  && rm -rf /var/lib/apt/lists/*
17
 
18
- # 2. Настройка переменных окружения (Android NDK r25c + API 30)
19
  ENV ANDROID_NDK_VERSION=r25c
20
  ENV ANDROID_API=30
21
  ENV ANDROID_ARCH=arm64
22
  ENV ANDROID_ABI=arm64-v8a
23
- ENV PY_VERSION=3.11.9
24
  ENV NDK_ROOT=/opt/android-ndk
25
  ENV PATH=$NDK_ROOT/toolchains/llvm/prebuilt/linux-x86_64/bin:$PATH
26
 
27
- # 3. Скачивание Android NDK
28
  WORKDIR /opt
29
  RUN wget -q https://dl.google.com/android/repository/android-ndk-${ANDROID_NDK_VERSION}-linux.zip && \
30
  unzip -q android-ndk-${ANDROID_NDK_VERSION}-linux.zip && \
31
  mv android-ndk-${ANDROID_NDK_VERSION} android-ndk && \
32
  rm android-ndk-${ANDROID_NDK_VERSION}-linux.zip
33
 
34
- # 4. Скачивание исходников Python 3.11 (для заголовков)
 
35
  WORKDIR /opt/python-src
36
- RUN wget -q https://www.python.org/ftp/python/${PY_VERSION}/Python-${PY_VERSION}.tgz && \
37
- tar -xzf Python-${PY_VERSION}.tgz && \
38
- mv Python-${PY_VERSION} python3-android
39
 
40
- # 5. Конфигурация Python для получения pyconfig.h под Android
41
  WORKDIR /opt/python-src/python3-android
 
 
 
42
  RUN ./configure \
43
  --host=aarch64-linux-android \
44
  --build=x86_64-linux-gnu \
 
45
  --enable-shared \
46
  --disable-ipv6 \
47
  ac_cv_file__dev_ptmx=no \
@@ -49,40 +46,37 @@ RUN ./configure \
49
  CC="aarch64-linux-android${ANDROID_API}-clang" \
50
  CXX="aarch64-linux-android${ANDROID_API}-clang++"
51
 
52
- # 6. Подготовка скрипта сборки
53
  WORKDIR /build
54
- RUN pip3 install build wheel
55
 
56
- # Создаем скрипт build_wheel.sh без лишних комментариев, чтобы не ломать слои
 
57
  RUN echo '#!/bin/bash' > build_wheel.sh && \
58
  echo 'export CC="aarch64-linux-android'${ANDROID_API}'-clang"' >> build_wheel.sh && \
59
  echo 'export LDSHARED="aarch64-linux-android'${ANDROID_API}'-clang -shared"' >> build_wheel.sh && \
60
  echo 'export CFLAGS="-I/opt/python-src/python3-android -I/opt/python-src/python3-android/Include -DANDROID"' >> build_wheel.sh && \
61
  echo 'export LDFLAGS="-L/opt/python-src/python3-android"' >> build_wheel.sh && \
62
  echo 'mkdir -p dist' >> build_wheel.sh && \
63
- echo 'pip3 wheel pycryptodome --no-binary :all: --no-deps -w dist/' >> build_wheel.sh
64
 
65
  RUN chmod +x build_wheel.sh
66
-
67
- # Запускаем сборку
68
  RUN ./build_wheel.sh
69
 
70
- # 7. Переименование и подготовка к выдаче
71
- # Создаем папку output и перемещаем туда файл с правильным именем
72
  RUN mkdir -p /output && \
73
  cd dist && \
 
74
  ORIGINAL_WHEEL=$(ls pycryptodome-*.whl | head -n 1) && \
75
- # Извлекаем версию из имени файла (например, pycryptodome-3.19.0-...)
76
  VERSION=$(echo $ORIGINAL_WHEEL | grep -oP 'pycryptodome-\K[0-9.]+') && \
77
- # Формируем нужное имя
78
  NEW_NAME="pycryptodome-${VERSION}-cp311-cp311-android_21-30_arm64_v8a.whl" && \
79
  mv "$ORIGINAL_WHEEL" "/output/$NEW_NAME"
80
 
81
- # Настройка прав доступа для пользователя (Hugging Face запускает не под root, нужно дать права на чтение)
82
  RUN chmod -R 777 /output
83
 
 
84
  WORKDIR /output
85
-
86
- # 8. Запуск HTTP сервера
87
- # Порт 7860 - стандартный порт для HF Spaces
88
  CMD ["python3", "-m", "http.server", "7860", "--directory", "/output"]
 
1
+ # ИСПОЛЬЗУЕМ PYTHON 3.11 КАК БАЗУ (чтобы версия хоста совпадала с целевой)
2
+ FROM python:3.11
3
 
4
+ # 1. Установка зависимостей для скачивания и распаковки
 
5
  RUN apt-get update && apt-get install -y \
6
  wget \
7
  unzip \
8
  build-essential \
 
 
 
 
 
 
 
9
  && rm -rf /var/lib/apt/lists/*
10
 
11
+ # 2. Переменные окружения (NDK r25c + API 30)
12
  ENV ANDROID_NDK_VERSION=r25c
13
  ENV ANDROID_API=30
14
  ENV ANDROID_ARCH=arm64
15
  ENV ANDROID_ABI=arm64-v8a
 
16
  ENV NDK_ROOT=/opt/android-ndk
17
  ENV PATH=$NDK_ROOT/toolchains/llvm/prebuilt/linux-x86_64/bin:$PATH
18
 
19
+ # 3. Скачиваем Android NDK
20
  WORKDIR /opt
21
  RUN wget -q https://dl.google.com/android/repository/android-ndk-${ANDROID_NDK_VERSION}-linux.zip && \
22
  unzip -q android-ndk-${ANDROID_NDK_VERSION}-linux.zip && \
23
  mv android-ndk-${ANDROID_NDK_VERSION} android-ndk && \
24
  rm android-ndk-${ANDROID_NDK_VERSION}-linux.zip
25
 
26
+ # 4. Скачиваем исходники Python 3.11.9 (точно ту же версию, что и база)
27
+ # Нам нужны исходники, чтобы сгенерировать pyconfig.h под Android
28
  WORKDIR /opt/python-src
29
+ RUN wget -q https://www.python.org/ftp/python/3.11.9/Python-3.11.9.tgz && \
30
+ tar -xzf Python-3.11.9.tgz && \
31
+ mv Python-3.11.9 python3-android
32
 
33
+ # 5. Конфигурируем Python под Android
34
  WORKDIR /opt/python-src/python3-android
35
+
36
+ # ВАЖНОЕ ИСПРАВЛЕНИЕ:
37
+ # --with-build-python=/usr/local/bin/python3 указывает на python хоста (из образа python:3.11)
38
  RUN ./configure \
39
  --host=aarch64-linux-android \
40
  --build=x86_64-linux-gnu \
41
+ --with-build-python=/usr/local/bin/python3 \
42
  --enable-shared \
43
  --disable-ipv6 \
44
  ac_cv_file__dev_ptmx=no \
 
46
  CC="aarch64-linux-android${ANDROID_API}-clang" \
47
  CXX="aarch64-linux-android${ANDROID_API}-clang++"
48
 
49
+ # 6. Сборка PyCryptodome
50
  WORKDIR /build
51
+ RUN pip install build wheel
52
 
53
+ # Создаем скрипт сборки
54
+ # CFLAGS включает пути к заголовкам, которые мы только что сконфигурировали
55
  RUN echo '#!/bin/bash' > build_wheel.sh && \
56
  echo 'export CC="aarch64-linux-android'${ANDROID_API}'-clang"' >> build_wheel.sh && \
57
  echo 'export LDSHARED="aarch64-linux-android'${ANDROID_API}'-clang -shared"' >> build_wheel.sh && \
58
  echo 'export CFLAGS="-I/opt/python-src/python3-android -I/opt/python-src/python3-android/Include -DANDROID"' >> build_wheel.sh && \
59
  echo 'export LDFLAGS="-L/opt/python-src/python3-android"' >> build_wheel.sh && \
60
  echo 'mkdir -p dist' >> build_wheel.sh && \
61
+ echo 'pip wheel pycryptodome --no-binary :all: --no-deps -w dist/' >> build_wheel.sh
62
 
63
  RUN chmod +x build_wheel.sh
 
 
64
  RUN ./build_wheel.sh
65
 
66
+ # 7. Финальная обработка файла
 
67
  RUN mkdir -p /output && \
68
  cd dist && \
69
+ # Находим файл
70
  ORIGINAL_WHEEL=$(ls pycryptodome-*.whl | head -n 1) && \
71
+ # Выдергиваем версию (например, 3.20.0)
72
  VERSION=$(echo $ORIGINAL_WHEEL | grep -oP 'pycryptodome-\K[0-9.]+') && \
73
+ # Формируем имя, которое вы просили
74
  NEW_NAME="pycryptodome-${VERSION}-cp311-cp311-android_21-30_arm64_v8a.whl" && \
75
  mv "$ORIGINAL_WHEEL" "/output/$NEW_NAME"
76
 
77
+ # Даем права на скачивание
78
  RUN chmod -R 777 /output
79
 
80
+ # 8. Запуск сервера для отдачи файла
81
  WORKDIR /output
 
 
 
82
  CMD ["python3", "-m", "http.server", "7860", "--directory", "/output"]