Разрешить моим друзьям запускать скрипт python? [Дубликат]

Может быть, немного пример кода поможет: Обратите внимание на разницу в сигнатурах вызова foo, class_foo и static_foo:

class A(object):
    def foo(self,x):
        print "executing foo(%s,%s)"%(self,x)

    @classmethod
    def class_foo(cls,x):
        print "executing class_foo(%s,%s)"%(cls,x)

    @staticmethod
    def static_foo(x):
        print "executing static_foo(%s)"%x    

a=A()

Ниже приведен обычный способ экземпляра объекта вызывает метод. Экземпляр объекта a неявно передается как первый аргумент.

a.foo(1)
# executing foo(<__main__.A object at 0xb7dbef0c>,1)

С помощью методов класса класс экземпляра объекта неявно передается как первый аргумент вместо self .

a.class_foo(1)
# executing class_foo(,1)

Вы также можете вызвать class_foo с помощью класса. Фактически, если вы определите что-то как метод класса, это, вероятно, потому, что вы намереваетесь называть его из класса, а не из экземпляра класса. A.foo(1) поставил бы TypeError, но A.class_foo(1) работает просто отлично:

A.class_foo(1)
# executing class_foo(,1)

. Одно из используемых людьми методов класса - это создание наследуемых альтернативных конструкторов .


С помощью staticmethods ни один self (экземпляр объекта), ни cls (класс) неявно передаются в качестве первого аргумента. Они ведут себя как простые функции, за исключением того, что вы можете вызвать их из экземпляра или класса:

a.static_foo(1)
# executing static_foo(1)

A.static_foo('hi')
# executing static_foo(hi)

Статические методы используются для группировки функций, которые имеют некоторое логическое соединение с классом класса.


foo - это просто функция, но когда вы вызываете a.foo, вы не просто получаете функцию, вы получаете «частично примененную» версию функции с экземпляром объекта a, связанным как первый аргумент функции. foo ожидает 2 аргумента, а a.foo ожидает только 1 аргумент.

a привязан к foo. Это означает термин «связанный» ниже:

print(a.foo)
# >

С a.class_foo, a не привязан к class_foo, а класс A привязан к class_foo ].

print(a.class_foo)
# >

Здесь, с помощью метода static, хотя это метод, a.static_foo просто возвращает хорошую функцию ole без привязки аргументов. static_foo ожидает 1 аргумент, а a.static_foo ожидает также 1 аргумент.

print(a.static_foo)
# 

И, конечно же, то же самое происходит, когда вы вызываете static_foo с классом A.

print(A.static_foo)
# 

457
задан ThinkingStiff 10 March 2013 в 03:50
поделиться

16 ответов

Вы можете использовать py2exe , как уже было сказано, и использовать cython , чтобы преобразовать ваши файлы .py в .pyc, скомпилированные файлы C, например .dll в Windows и .so в Linux, гораздо труднее вернуться, чем обычные файлы .pyo и .pyc (а также повысить производительность!) [/ ​​g2]

162
ответ дан Ian Spence 27 August 2018 в 03:03
поделиться

Использовать py2exe .... использовать ниже настроенные файлы:

 from distutils.core import setup
 import py2exe

 from distutils.filelist import findall
 import matplotlib

 setup(
       console=['PlotMemInfo.py'],

       options={
                'py2exe': {
                'packages' : ['matplotlib'],
            'dll_excludes': ['libgdk-win32-2.0-0.dll',
                                 'libgobject-2.0-0.dll',
                 'libgdk_pixbuf-2.0-0.dll']
                          }
                },
       data_files = matplotlib.get_py2exe_datafiles()
     )
13
ответ дан Anand 27 August 2018 в 03:03
поделиться

py2exe сделает exe-файл, который вы хотите, но вам нужно иметь ту же версию MSVCR90.dll на машине, в которой вы собираетесь использовать свой новый exe. Дополнительную информацию см. В http://www.py2exe.org/index.cgi/Tutorial .

6
ответ дан Belial 27 August 2018 в 03:03
поделиться

Возможно, вы захотите исследовать Nuitka . Он использует исходный код python и преобразует его в вызовы API C ++. Затем он компилируется в исполняемый двоичный файл (ELF в Linux). Он существует уже несколько лет и поддерживает широкий спектр версий Python.

Вы, вероятно, также получите повышение производительности, если будете использовать его. Рекомендуется.

62
ответ дан cdarke 27 August 2018 в 03:03
поделиться

Я хотел бы скомпилировать некоторую полезную информацию о создании автономных файлов в Windows с помощью Python 2.7.

Я использовал py2exe, и он работает, но у меня были некоторые проблемы.

  • Он обнаружил некоторые проблемы для создания отдельных файлов в 64-битных бит Windows: Использование bundle_files = 1 с py2exe не работает ;
  • Необходимо создать файл setup.py чтобы он работал. http://www.py2exe.org/index.cgi/Tutorial#Step2 ;
  • У меня были проблемы с зависимостями, которые вам нужно решить, импортируя пакеты в установочный файл ;
  • Мне не удалось заставить его работать вместе с PyQt ..

Эта последняя причина заставила меня попробовать PyInstaller http: //www.pyinstaller. org / .

На мой взгляд, это намного лучше, потому что:

  • Это проще в использовании.

Я предлагаю создать файл .bat со следующими строками, например (pyinstaller.exe должен находиться в Пути Windows):

pyinstaller.exe --onefile MyCode.py

Итак, я думаю, что, по крайней мере, для python 2.7, лучшим и простым вариантом является PyInstaller. [/ g1 7]

19
ответ дан cricket_007 27 August 2018 в 03:03
поделиться

Использовать Cython для преобразования в c, компиляции и ссылки с gcc. Другим может быть, сделать основные функции в c (те, которые вы хотите сделать сложными для обратного), скомпилировать их и использовать python boost для импорта скомпилированного кода (плюс вы получите гораздо более быстрое выполнение кода). затем используйте любой инструмент, упомянутый для распространения.

2
ответ дан F.Moure 27 August 2018 в 03:03
поделиться

Не совсем упаковка кода python, но теперь есть и grumpy из google, который переводит код в Go. Он не поддерживает python C api, поэтому он может не работать для всех проектов.

4
ответ дан freeformz 27 August 2018 в 03:03
поделиться

Да, можно скомпилировать скрипты Python в автономный исполняемый файл.

PyInstaller можно использовать для преобразования программ Python в автономные исполняемые файлы под Windows, Linux, Mac OS X, FreeBSD, Solaris и AIX. Это один из рекомендуемых преобразователей.

py2exe преобразует скрипты Python в исполняемый только в платформе Windows.

Cython является статический компилятор для языка программирования Python и расширенного языка программирования Cython.

18
ответ дан fury.slay 27 August 2018 в 03:03
поделиться

Для скриптов Python 3.2 единственным выбором является Cxfreeze. Создайте его из источников, иначе он не сработает.

Для python 2.x я предлагаю pyinstaller, поскольку он может упаковать программу python в один исполняемый файл, в отличие от CxFreeze, который выводит также библиотеки.

8
ответ дан Gabber 27 August 2018 в 03:03
поделиться

Вы можете найти список утилит распространения, перечисленных @ https://wiki.python.org/moin/DistributionUtilities .

Я использую bbfreeze , и он работает очень хорошо (но пока поддержка python 3).

5
ответ дан Joe 27 August 2018 в 03:03
поделиться

И третий вариант - cx_Freeze , который является кросс-платформенным.

20
ответ дан Katriel 27 August 2018 в 03:03
поделиться

Мне сказали, что PyRun, https://www.egenix.com/products/python/PyRun/ , также является опцией.

1
ответ дан Kraig Brockschmidt - MSFT 27 August 2018 в 03:03
поделиться

Используя pyinstaller, я нашел лучший метод, используя ярлык для .exe, а не создание --onefile. В любом случае, возможно, есть некоторые файлы данных, и если вы используете приложение на основе сайта, ваша программа зависит от файлов html, js, css. Нет смысла перемещать все эти файлы где-то .. вместо этого, если мы переместим рабочий путь вверх.

Сделайте ярлык для exe, переместите его вверху и установите целевые и начальные пути, как указано, чтобы относительные пути переместились в dist \ folder: Target: %windir%\system32\cmd.exe /c start dist\web_wrapper\web_wrapper.exe Start in: "%windir%\system32\cmd.exe /c start dist\web_wrapper\" Можно переименовать ярлык на все, что переименовано в «GTFS-Manager». Теперь, когда я дважды щелкаю ярлык, это как если бы я python-запускал файл! Я нашел этот подход лучше, чем --onefile в качестве:

  1. В случае одного файла существует проблема с отсутствием .dll для win7 OS, которая требует предварительной установки и т. Д. Yawn. С обычной сборкой с несколькими файлами таких проблем нет.
  2. Все файлы, которые использует мой скрипт python (он развертывает веб-сервер торнадо и нуждается в большом количестве файлов на сайте!) Не нужно никуда перемещать: я просто создаю ярлык вверху.
  3. Я могу использовать эту ту же самую папку в ubuntu (запустите python3 myfile.py) и окна (дважды щелкните ярлык).
  4. Мне не нужно беспокоиться о чрезмерно сложном взломе файла .spec, чтобы включить файлы данных и т. д.

О, не забудьте удалить из папки сборки после здание будет экономить на размере.

1
ответ дан nikhilvj 27 August 2018 в 03:03
поделиться

Вы можете использовать PyInstaller для упаковки программ Python в качестве автономных исполняемых файлов. Он работает на Windows, Linux и Mac.

PyInstaller Quickstart

Установить PyInstaller из PyPI:

pip install pyinstaller

Перейти в каталог вашей программы и run:

pyinstaller yourprogram.py

Это приведет к созданию пучка в подкаталоге, названном dist.

Более подробное руководство по обходу см. в руководстве .

137
ответ дан Steven Vascellaro 27 August 2018 в 03:03
поделиться

вам может понравиться py2exe . вы также найдете там информацию о том, как это сделать на linux

17
ответ дан user237419 27 August 2018 в 03:03
поделиться

Я также рекомендую pyinstaller для лучшей обратной совместимости, такой как python 2.3 - 2.7. для py2exe у вас должен быть python 2.6

9
ответ дан yantaq 27 August 2018 в 03:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: