У этого вопроса уже есть ответ здесь:
Я написал сценарий, который поможет пользователю Windows в ее повседневной жизни. Я хочу просто послать ей .exe и не попросить, чтобы она установила питона, dlls или имела, чтобы иметь дело с любыми дополнительными файлами.
Я прочитал много stackoverflow записей относительно компилирования сценариев Пайтона в исполняемые файлы. Я немного смущен, поскольку есть много вариантов, но некоторые кажутся датированными (никакие обновления с 2008), и ни один не был достаточно прост для меня не спросить это прямо сейчас после нескольких часов, проведенных на это.
Я надеюсь, что есть лучший, актуальный способ сделать это.
Я изучил:
но или я не мог заставить их работать или не мог понять, как получить результат, в котором я нуждаюсь. Самое близкое, которое я получил, было с py2exe, но он все еще дал мне MSVCR71.dll
Я ценил бы пошаговый ответ, когда я был также неспособен следовать некоторым щипающим ответам здесь, которые требуют некоторого предшествующего понимания того, как использовать py2exe или некоторые из других инструментов.
Я использую Пайтона 2.5, поскольку один из модулей только доступен для той версии.
Pyinstaller создаст исполняемый файл, если вы используете опцию - onefile
(хотя На самом деле это экстракты, затем пробегает сама).
Есть простой учебник Pyinstaller . Если у вас есть какие-либо вопросы о его использовании, пожалуйста, опубликуйте их ...
Вы можете посмотреть, может ли ваше приложение под управлением IronPython. Если это так, вы можете скомпилировать его в EXE http://www.codeplex.com/arnpython
Вы используете Соединение: Didfailwitherror:
? Может быть время ожидания, который предотвращает успешное завершение загрузки.
Постарайтесь избавиться от @synchronized
блоков и посмотрите, что происходит.
Строка внутри квадратных скобок, кажется, идентификатор потоков, как вы уже догадались. Так что, возможно, вы заблокированы в @synchronized
. На самом деле, я не вижу причину для переключения потока - все проблемный код должен работать в основной ните ( PerformeselectorOnmaintHaintHead
...
Во всяком случае, нет необходимости использовать оба @synchronized
и ShareSelectoronMaintHaintHead
.
Кстати, я не видел NSURLConnection * Connection = [[NSURLConnection Alloc] initWithrequest: Запрос делегата: Self];
линия. Где вы инициируете соединение?
Как для параллельных загрузок - я думаю, что вы можете загрузить более одного файла за раз с тем же кодом, который вы используете здесь. Просто создайте отдельное соединение для каждой загрузки.
-121--5086305- Я бы присоединился к @nicholas в рекомендации Pyinstaller (с флагом - onefile
), но будет предупрежден : сделать Не Используйте «Последний релиз», Pyinstaller 1.3 - это лет . Используйте «Предварительный выпуск» 1.4, загрузите его здесь - или даже лучше код из SVN REPO - Установите SVN и запустить SVN CO http: // svn.pyinstaller.org/trunk Pyinstaller
.
Как подразумевает @nicholas, динамические библиотеки не могут быть беги из одного и того же файла, что и остальная часть исполняемого, но, к счастью, они могут быть , упаковываются вместе со всем остальным в «Самосваркающий» исполняемый файл, который будет распаковать себя в некоторой временной каталоге по мере необходимости; Pyinstaller делает хорошую работу по этому поводу (и во многих других вещах - Py2exe
более популярно, но Pyinstaller
, на мой взгляд, предпочтительнее во всех других отношениях).
Используя py2exe, включите это в свой setup.py:
from distutils.core import setup
import py2exe, sys, os
sys.argv.append('py2exe')
setup(
options = {'py2exe': {'bundle_files': 1}},
windows = [{'script': "YourScript.py"}],
zipfile = None,
)
затем вы можете запустить его через командную строку / Idle, оба варианта работают для меня. Надеюсь, это поможет