LINUX.ORG.RU
ФорумTalks

Как откомпилировать python3 в объектный или исполняемый файл ?

 , ,


1

3

Доброго времени! ожидая компиляции Funtoo, я написал небольшую программу на Python3 и её аналог на C++ Код C++ для Линукс. Ожидание нажатия клавиши Enter (комментарий)

Меня интересует откомпилировать с помощью python3 мою программу 1.py в такой же объектный файл, как это делает g++ с файлом 1.cpp. У меня не получается ни с compileall ни с py_compile:

$ cat 1.py
#!/usr/bin/env python3

print("Программа Hello!")
name = input("Введите ваше имя и нажмите enter: ")
print("Hello, ", name);
input("Нажмите Enter для продолжения")

$ python3 -m compileall 1.py
Compiling '1.py'...

$ ls __pycache__
1.cpython-34.pyc

$ chmod +x ./__pycache__/1.cpython-34.pyc
$ ./__pycache__/1.cpython-34.pyc
./__pycache__/1.cpython-34.pyc: строка 1: $'\356\f\r': команда не найдена
./__pycache__/1.cpython-34.pyc: строка 2: синтаксическая ошибка рядом с неожиданным маркером «)»
./__pycache__/1.cpython-34.pyc: строка 2: `абракадабра, не пропускаемая лором)Программа Hello!u8Введите ваше имя и нажмите enter: zHello, u2Нажмите Enter для продолженияN)абракадабра, не пропускаемая лором1.py<module>'


$ rm __pycache__ -rf
$ python3 -m py_compile 1.py
$ ls __pycache__
1.cpython-34.pyc
$ chmod ./__pycache__/1.cpython-34.pyc

$ ./__pycache__/1.cpython-34.pyc
./__pycache__/1.cpython-34.pyc: строка 1: $'\356\f\r': команда не найдена
./__pycache__/1.cpython-34.pyc: строка 2: синтаксическая ошибка рядом с неожиданным маркером «)»
./__pycache__/1.cpython-34.pyc: строка 2: `абракадабра, не пропускаемая лоромПрограмма Hello!u8Введите ваше имя и нажмите enter: zHello, u2Нажмите Enter для продолженияN)абракадабра, не пропускаемая лором1.py<module>'

$ cd __pycache__
$ g++ 1.cpython-34.pyc
1.cpython-34.pyc: file not recognized: Формат файла не распознан
collect2: ошибка: выполнение ld завершилось с кодом возврата 1
$ gcc 1.cpython-34.pyc
1.cpython-34.pyc: file not recognized: Формат файла не распознан
collect2: ошибка: выполнение ld завершилось с кодом возврата 1

как получить объектный файл из python3 файла?

★★

И вот вроде бы и отвечает nuitka твоим запросам, но такая ска капризная она...в последний раз я даже не смог сконпелять в ней обычный lxml

zolden ★★★★★
()

Насколько я знаю, NEEQUAQUE, питон — такой язык, который из-за его особенностей не компилируется в бинарный код.

te111011010
()
Ответ на: комментарий от te111011010

такой язык, который из-за его особенностей не компилируется в бинарный код

жс же компилируется (хоть и частями и на лету). Было бы желание

makoven ★★★★★
()
Последнее исправление: makoven (всего исправлений: 1)
Ответ на: комментарий от Deleted
# PYTHON_TARGETS="python3_4" emerge dev-python/pip
# whereis pip
pip: /usr/bin/pip /usr/bin/pip3.4

$ pip3.4 install -U nuitka
ERROR: (Gentoo) Please run pip with the --user option to avoid breaking python-exec
$ pip install -U nuitka
ERROR: (Gentoo) Please run pip with the --user option to avoid breaking python-exec
$ pip3.4 install --user nuitka
Collecting nuitka
  Downloading Nuitka-0.5.28.1.tar.gz (2.0MB)
    100% |████████████████████████████████| 2.0MB 151kB/s 
Installing collected packages: nuitka
  Running setup.py install for nuitka ... done
Successfully installed nuitka-0.5.28.1

$ pip3 install --user nuitka
Requirement already satisfied: nuitka in ./.local/lib64/python3.4/site-packages
$ pip install --user nuitka
Requirement already satisfied: nuitka in ./.local/lib64/python3.4/site-packages

$ nuitka 1.py
bash: nuitka: команда не найдена

$ whereis nuitka
nuitka:

юзеру не видна.

руту не видна:


# pip3.4 install nuitka --user
Collecting nuitka
  Downloading Nuitka-0.5.28.1.tar.gz (2.0MB)
    100% |████████████████████████████████| 2.0MB 148kB/s 
Installing collected packages: nuitka
  Running setup.py install for nuitka ... done
Successfully installed nuitka-0.5.28.1
# whereis nuitka
nuitka:
# nuitka --help
bash: nuitka: команда не найдена

znavko ★★
() автор топика
Ответ на: комментарий от znavko
Requirement already satisfied: nuitka in ./.local/lib64/python3.4/site-packages

nutika установлен, тебе даже написали, куда. У тебя просто туда path не прописан.

Да и обычно такую штуку проварачивают через virtualenv.

Хотя честно тебе скажу: занимаешься извращениями. Возьми себе тот же Go, чтоб собирать в один бинарь или какой-нибудь Nim, а Python лучше использовать в интерпретируемом виде. Ибо геморроя будет много, а я за тебя с ним разбираться не буду.

Для встраивания python модулей в нативную программу лучше используй https://docs.python.org/3.6/extending/embedding.html

Deleted
()
Последнее исправление: merhalak (всего исправлений: 2)
Ответ на: комментарий от te111011010

питон — такой язык, который из-за его особенностей не компилируется в бинарный код.

Лисперы однажды взяли и скомпилировали. Код там довольно простой. Так что вопрос исключительно опыта и правильных инструментов. Franz - место работы автоа - известен своим сильно платным ПО написаным на лиспе.

antares0 ★★★★
()
Последнее исправление: antares0 (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.