Python setup.py phát triển vs cài đặt


335

Hai tùy chọn trong setup.py developinstalllàm tôi bối rối. Theo trang web này , việc sử dụng developtạo ra một liên kết đặc biệt đến thư mục gói trang web.

Mọi người đã gợi ý rằng tôi sử dụng python setup.py installđể cài đặt mới và python setup.py developsau khi có bất kỳ thay đổi nào được thực hiện đối với tệp cài đặt.

Bất cứ ai cũng có thể làm sáng tỏ về việc sử dụng các lệnh này?

Câu trả lời:


468

python setup.py install được sử dụng để cài đặt các gói (thường là bên thứ ba) mà bạn sẽ không tự phát triển / sửa đổi / gỡ lỗi.

Đối với nội dung của riêng bạn, trước tiên bạn muốn cài đặt gói của mình và sau đó có thể thường xuyên chỉnh sửa mã mà không phải cài đặt lại gói mỗi lần - và đó chính xác là những gì python setup.py develop: nó cài đặt gói (thường chỉ là một thư mục nguồn) theo cách cho phép bạn thuận tiện chỉnh sửa mã của mình sau khi được cài đặt vào môi trường (ảo) và thay đổi có hiệu lực ngay lập tức.

Lưu ý rằng rất nên sử dụng pip install .(cài đặt) và pip install -e .(cài đặt cho nhà phát triển) để cài đặt các gói, vì việc gọi setup.pytrực tiếp sẽ làm những việc sai cho nhiều phụ thuộc, chẳng hạn như kéo trước và phiên bản gói không tương thích hoặc làm cho gói khó gỡ cài đặt pip.


81
Erik nói đúng. Cũng hữu ích để biết là setup.py developđi kèm với một --uninstalltùy chọn khi bạn thực hiện hack xung quanh.
philadams 18/12/13

5
Suy nghĩ cuối cùng ở đây là một tùy chọn khác setup.py developkhi hack gói python là sử dụng sửa đổi đường dẫn "đơn giản (nhưng rõ ràng) để giải quyết gói đúng cách" re Kenneth Reitz
philadams 18/12/13

4
Tôi gặp vấn đề khi sử dụng python setup.py developthiết lập Ceilometer để phát triển địa phương. Tôi đã kết thúc bằng cách sử dụng pip install -e PATH(trong một virtualenv) để tránh các vấn đề được cắt quaeasy_install .
Joe D'Andrea

1
không chắc chắn nếu điều này có vấn đề, nhưng nếu tôi đang sử dụng python 3, v.v., liệu người ta có phải chạy python setup.py developkhác không?
Charlie Parker

1
Nó hoạt động với python3, nhưng đừng quên gỡ bỏ mọi cài đặt pip hiện tại mà bạn có thể có, vì chúng sẽ đụng độ với nhau (điều này xảy ra với tôi vào lúc này).
Léo Germond

124

Từ tài liệu . Các developsẽ không cài đặt gói nhưng nó sẽ tạo ra một .egg-linktrong các thư mục lại triển khai vào thư mục mã nguồn của dự án.

Vì vậy, nó giống như cài đặt nhưng thay vì sao chép vào site-packagesnó, nó thêm một liên kết tượng trưng ( .egg-linkhoạt động như một liên kết tượng trưng đa nền tảng).

Bằng cách đó, bạn có thể chỉnh sửa mã nguồn và xem các thay đổi trực tiếp mà không phải cài đặt lại mỗi khi bạn thực hiện một chút thay đổi. Điều này rất hữu ích khi bạn là nhà phát triển của dự án đó develop. Nếu bạn chỉ cài đặt gói của người khác, bạn nên sử dụnginstall


24

Một điều khác mà mọi người có thể thấy hữu ích khi sử dụng developphương thức này là --usertùy chọn cài đặt mà không cần sudo. Ví dụ:

python setup.py develop --user

thay vì

sudo python setup.py develop

11
IIUC bạn không bao giờ nên setup.py developtrong hệ thống của bạn, điều này chỉ có ý nghĩa trong một virtualenv.
splititherzero

2
@dividitherzero Ý bạn là người ta phải luôn luôn sử dụng python setup.py develop --user, nếu tôi hiểu đúng? Ngoài ra, bạn có thể vui lòng cho tôi biết gói được cài đặt bằng cách sử dụng python setup.py develop --userkhông? Cảm ơn!
ROBOT AI

2
Tôi nghĩ rằng --usersẽ cài đặt trong một thư mục trong tài khoản nhà của bạn và sẽ không ảnh hưởng đến những người dùng khác trong hệ thống của bạn. Các developsẽ tạo liên kết đến thư mục nguồn dự án của bạn thay vì thực sự sao chép tất cả mọi thứ. develop --usernên ổn, và developtrong một virtualenv cũng vậy. Chỉ developvới hệ thống thực tế là lạ, bởi vì bạn có thể có những người dùng khác sử dụng thứ gì đó trỏ đến dự án trong bản sao mã nguồn dự án cá nhân của bạn.
splititherzero

4
Mặc dù vậy, nhiều người (hầu hết?) Không chạy trên các hệ thống nhiều người dùng
hãy bắt đầu từ

1
@boatcoder, Mac và Linux (và Windows) có thể là các hệ thống nhiều người dùng , nhưng rất có thể nhà phát triển là tài khoản người dùng (thực) duy nhất trên máy tính để bàn của anh ấy và tôi tin đó là ý nghĩa của quá khứ.
MestreLion
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.