Cara membuat file telur Python

91

Saya punya pertanyaan tentang file telur dengan Python.

Saya memiliki banyak kode Python yang diatur oleh paket dan saya mencoba membuat file telur. Saya mengikuti instruksi , tetapi itu sangat umum.

Berdasarkan hal itu, sepertinya saya perlu memiliki file setup.py.

  1. Bisakah Anda memberi tahu saya apa yang perlu saya masukkan ke dalam file setup.py dan di mana tempatnya?
  2. Saya kira itu cukup untuk membuat setup.py dan kemudian memulai "setup.py bdist_egg" untuk mendapatkan file telur. Bisakah Anda mengkonfirmasi?
  3. Apakah mungkin hanya menyertakan file .pyc ke dalam file telur?
  4. Memiliki file .egg bagaimana saya bisa memulai kode darinya tanpa membongkar seperti java -jar <jar file>apakah?
yart
sumber
Lalu apa yang harus saya gunakan sebagai pengganti telur? Inilah pertanyaan saya tentang telur stackoverflow.com/questions/14902732/…
Hijau
@YauhenYakimovich: tautan itu sekarang menjadi domain spam terparkir. Mungkin perlu diedit untuk menggunakan packaging.python.org/en/latest/wheel_egg ?
Chris Adams

Jawaban:

74

Anda membaca dokumentasi yang salah. Anda menginginkan ini: https://setuptools.readthedocs.io/en/latest/setuptools.html#develop-deploy-the-project-source-in-development-mode

  1. Membuat setup.py tercakup dalam dokumentasi distutils dalam dokumentasi pustaka standar Python di sini . Perbedaan utama (untuk telur python) adalah Anda import setupdari setuptools, bukan distutils.

  2. Ya. Itu seharusnya benar.

  3. Saya rasa tidak. pycfile dapat bergantung pada versi dan platform. Anda mungkin dapat membuka telur (seharusnya hanya berupa file zip) dan menghapus .pyfile yang meninggalkan .pycfile, tetapi itu tidak disarankan.

  4. Saya tidak yakin. Itu mungkin "Mode Pengembangan". Atau apakah Anda mencari beberapa mode "py2exe" atau "py2app"?

sayu
sumber
51
+1: Jangan pernah menyertakan file .pyc. Mereka benar-benar membingungkan. Kami tidak sengaja menyalin file windows .pyc ke kotak linux dan memiliki pesan pelacakan kesalahan paling membingungkan yang pernah ada. Karena nama file Windows asli dimana nama file. Mengerikan melihat nama file windows itu di server produksi.
S. Lotot
cukup gunakan pyinstaller
Nickpick
30

Untuk # 4, hal terdekat untuk memulai java dengan file jar untuk aplikasi Anda adalah fitur baru di Python 2.6, file zip dan direktori yang dapat dieksekusi .

python myapp.zip

Dimana myapp.zip adalah zip yang berisi __main__.pyfile yang dieksekusi sebagai file script yang akan dieksekusi. Dependensi paket Anda juga dapat disertakan dalam file:

__main__.py
mypackage/__init__.py
mypackage/someliblibfile.py

Anda juga bisa mengeksekusi telur, tetapi mantranya tidak sebaik:

# Bourn Shell and derivatives (Linux/OSX/Unix)
PYTHONPATH=myapp.egg python -m myapp
rem Windows 
set PYTHONPATH=myapp.egg
python -m myapp

Ini menempatkan myapp.egg di jalur Python dan menggunakan argumen -m untuk menjalankan modul. Myapp.egg Anda mungkin akan terlihat seperti ini:

myapp/__init__.py
myapp/somelibfile.py

Dan python akan berjalan __init__.py(Anda harus memeriksanya __file__=='__main__'di aplikasi Anda untuk penggunaan baris perintah).

File telur hanyalah file zip sehingga Anda mungkin dapat menambahkan __main__.pyke telur Anda dengan alat zip dan membuatnya dapat dieksekusi di python 2.6 dan menjalankannya seperti python myapp.eggbukan mantra di atas di mana variabel lingkungan PYTHONPATH diatur.

Informasi lebih lanjut tentang file zip yang dapat dieksekusi termasuk cara membuatnya dapat dieksekusi secara langsung dengan shebang dapat ditemukan di posting blog Michael Foord tentang masalah ini .

lambacck
sumber
Sebagai alternatif, seseorang dapat menggunakan panduan lingkungan virtual.python-distribute.org/installation.html#upgrading
Yauhen Yakimovich
10

Saya pikir Anda harus menggunakan roda python untuk distribusi, bukan telur sekarang.

Roda adalah standar baru distribusi python dan dimaksudkan untuk menggantikan telur. Dukungan ditawarkan dalam pip> = 1.4 dan setuptools> = 0.8.

Hanfei Sun
sumber
2
Sejauh yang saya tahu, Anda tidak dapat mengimpor roda. Terkadang saya hanya ingin menerapkan skrip saya bersama dengan telur untuk membuatnya lebih portabel.
Gillespie