Cách tạo tệp trứng Python


91

Tôi có câu hỏi về tệp trứng trong Python.

Tôi có nhiều mã Python được sắp xếp theo gói và tôi đang cố gắng tạo các tệp trứng. Tôi đang làm theo hướng dẫn , nhưng chúng rất phổ biến.

Theo đó, có vẻ như tôi cần có một tệp setup.py.

  1. Bạn vui lòng cho tôi biết tôi cần đưa những gì vào tệp setup.py và nơi nó sẽ nằm ở đâu?
  2. Tôi cho rằng đã đủ để tạo setup.py và sau đó bắt đầu "setup.py bdist_egg" để lấy tệp trứng. Bạn có thể vui lòng xác nhận?
  3. Có thể chỉ bao gồm các tệp .pyc vào tệp trứng không?
  4. Có tệp .egg làm thế nào tôi có thể bắt đầu mã từ nó mà không cần giải nén như thế java -jar <jar file>nào?

Sau đó tôi nên dùng gì để thay thế trứng? Đây là câu hỏi của tôi về trứng stackoverflow.com/questions/14902732/…
Green

@YauhenYakimovich: liên kết đó bây giờ là một miền thư rác chưa sử dụng. Có thể đáng để chỉnh sửa để sử dụng packaging.python.org/en/latest/wheel_egg ?
Chris Adams

Câu trả lời:


74

Bạn đang đọc sai tài liệu. Bạn muốn điều này: https://setuptools.readthedocs.io/en/latest/setuptools.html#develop-deploy-the-project-source-in-development-mode

  1. Tạo setup.py được đề cập trong tài liệu distutils trong tài liệu thư viện chuẩn của Python tại đây . Sự khác biệt chính (đối với trứng trăn) là bạn import setupđến từ setuptools, không phải distutils.

  2. Vâng. Điều đó nên đúng.

  3. Tôi không nghĩ vậy. pyctệp có thể phụ thuộc vào phiên bản và nền tảng. Bạn có thể mở trứng (chúng chỉ nên là tệp zip) và xóa .pytệp để lại .pyctệp, nhưng điều này không được khuyến khích.

  4. Tôi không chắc. Đó có thể là “Chế độ phát triển”. Hoặc bạn đang tìm kiếm một số chế độ “py2exe” hoặc “py2app”?


51
+1: Không bao giờ bao gồm các tệp .pyc. Chúng hoàn toàn khó hiểu. Chúng tôi đã vô tình sao chép các tệp windows .pyc vào một hộp linux và có thông báo tìm lại lỗi khó hiểu nhất từ ​​trước đến nay. Bởi vì tên tệp nơi tên tệp gốc của Windows. Thật kinh hoàng khi thấy những tên tệp cửa sổ đó trên máy chủ sản xuất.
S.Lott

chỉ cần sử dụng pyinstaller
Nickpick

30

Đối với # 4, điều gần nhất để bắt đầu java với tệp jar cho ứng dụng của bạn là một tính năng mới trong Python 2.6, các tệp zip và thư mục thực thi .

python myapp.zip

Trong đó myapp.zip là một tệp zip chứa __main__.pytệp được thực thi dưới dạng tệp kịch bản sẽ được thực thi. Các gói phụ thuộc của bạn cũng có thể được bao gồm trong tệp:

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

Bạn cũng có thể thực hiện một quả trứng, nhưng câu thần chú không đẹp bằng:

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

Điều này đặt myapp.egg trên đường dẫn Python và sử dụng đối số -m để chạy một mô-đun. Myapp.egg của bạn có thể sẽ trông giống như sau:

myapp/__init__.py
myapp/somelibfile.py

Và python sẽ chạy __init__.py(bạn nên kiểm tra điều đó __file__=='__main__'trong ứng dụng của mình để sử dụng dòng lệnh).

Tệp trứng chỉ là tệp zip nên bạn có thể thêm __main__.pyvào trứng của mình bằng công cụ zip và làm cho nó có thể thực thi trong python 2.6 và chạy nó giống như python myapp.eggthay vì câu chú ở trên, nơi biến môi trường PYTHONPATH được đặt.

Thông tin thêm về các file zip thực thi bao gồm cách để làm cho họ trực tiếp thực thi với một công việc có thể được tìm thấy trên bài đăng blog Michael Foord về đề tài này .


Ngoài ra người ta có thể sử dụng môi trường ảo guide.python-distribute.org/installation.html#upgrading
Yauhen Yakimovich

10

Tôi nghĩ bạn nên sử dụng bánh xe trăn để phân phối thay vì trứng bây giờ.

Bánh xe là tiêu chuẩn mới của việc phân phối trăn và nhằm thay thế trứng. Hỗ trợ được cung cấp bằng pip> = 1,4 và setuptools> = 0,8.


2
Bạn không thể nhập một bánh xe, theo như tôi có thể nói. Đôi khi tôi chỉ muốn triển khai tập lệnh của mình cùng với một quả trứng để làm cho nó dễ di chuyển hơn.
Gillespie
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.