Cкрипты компиляции python программы

10 000 руб. за проект • электронные деньги
12 марта 2017, 00:52 • 0 откликов • 96 просмотров
Сделать скрипты компиляции python программы (app.py) так, чтобы она работала без установки зависимостей и python интерпретатора на Linux, Mac и Windows.

1)Подготовить портативную версию интерпретатора python поддерживаемого gsutil (python 2.7) для платформ .
  • Linux (Debian, Red Hat, СentOS)
  • Mac OS (>10)
  • Windows (7-10)
подготовленные интерпретаторы должны мочь запускать портативную версию gsutil (gsutil.exe)- https://cloud.google.com/storage/docs/gsutil_install. Портативная версия gsutil живет здесь https://storage.googleapis.com/pub/gsutil.zip

2)Написать скрипт компиляции app.py (см. ниже) с помощью pyinstaller==3.1.1 , который
A)создает app.exe
B)упаковывает все необходимые элементы для app.exe, а именно:
  1. соответствующей для платформы python 2.7 interpreter
  2. мобильный gsutil package и gsutil.exe
  3. дургие необходимые для app.exe библиотеки в DLL like контейнер (не zip).
    • google-api-python-client==1.6.1
    • pycrypto==2.6.1
    • oauth2client==3.0.0
    • gsutil==4.20
    • cached-property==1.3.0
    • requests[security]==2.12.4
    • raven==6.0.0
Tак чтобы при запуске app.exe запускался мобильный gsutil.exe используя портативный python interpreter, добавлялись необходимы PATH (чтобы избежать конфликтов окружения) и app.exe мог выполнять команды с использование мобильног gsutil.exe

Таким образом, приблизительная структура компилированной версии должна выглядеть следующим образом:

app.exe
gsutil.exe
DLLs

app.py

import sys
import subprocess
import os

#necessary libraries
import re
import getpass
import argparse
import subprocess
import json
import base64
import shutil
import tempfile
from contextlib import contextmanager
from datetime import datetime, timedelta
from Crypto.Cipher import AES
from cached_property import cached_property
import requests
import raven
from raven.transport import HTTPTransport
from idna_raven import IdnaProcessor # noqa
import requests.packages.urllib3 # noqa

#test code

p = subprocess.Popen(
['python','gsutil.py', '-v'],
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT,
bufsize=0,
)
o,e = p.communicate()
# for line in iter(p.stdout.readline, b''):
# sys.stdout.write(line)
print 'output:',o
print 'error:', e