Cài đặt Python install_requires

Tại sao lại đặt các phụ thuộc cần thiết của bạn ở nhiều vị trí khi một vị trí là đủ? . py

Trăn đá Bắc Phi cái [Python sebae] ấp trứng tại Tropicario — The Tropical Animal House, Helsinki, Phần Lan. Được cấp phép theo CC BY-SA 3. 0

include Pipfile
2

import tomldef get_install_requirements[]:
try:
# read my pipfile
with open ['Pipfile', 'r'] as fh:
pipfile = fh.read[]
# parse the toml
pipfile_toml = toml.loads[pipfile]
except FileNotFoundError:
return []
# if the package's key isn't there then just return an empty list
try:
required_packages = pipfile_toml['packages'].items[]
except KeyError:
return []
# If a version/range is specified in the Pipfile honor it
# otherwise just list the package
return ["{0}{1}".format[pkg,ver] if ver != "*"
else pkg for pkg,ver in required_packages]
setup[
# other keyword arguments omitted
install_requires = get_install_requirements[],
]

Bạn cũng sẽ cần thêm

include Pipfile
3 vào
include Pipfile
4 của mình để xây dựng
include Pipfile
5

include Pipfile
6

include Pipfile
Nền

Phụ thuộc rất khó và có rất nhiều ý tưởng về cách xử lý chúng. Đặc biệt, các thư viện khác với các ứng dụng về cách xử lý các gói yêu cầu. Bài viết này đề xuất một giải pháp cho cả thư viện và ứng dụng. Chúng tôi sẽ sử dụng tiêu chuẩn

include Pipfile
7 để xây dựng thư viện Python và
include Pipfile
8 để quản lý các phụ thuộc. Bằng cách sử dụng
include Pipfile
9, chúng tôi có thể chỉ định cách tiếp cận chi tiết cho các phiên bản phụ thuộc, nhưng chúng tôi cũng có thể thoải mái hơn và cho phép phiên bản phụ thuộc mới nhất trong khi tạo lại môi trường làm việc nhờ vào
include Pipfile
10

Quản lý yêu cầu thư viện

Các phần phụ thuộc thư viện Python, còn được gọi là phần phụ thuộc trừu tượng, thường không ghim vào một phiên bản cụ thể [là bản ghi tuyệt vời] trong

include Pipfile
7. Các phụ thuộc trừu tượng này phải tương thích với các thư viện khác và bằng cách ghim chúng vào một phiên bản cụ thể, bạn có thể tạo ra tình huống trong đó các thư viện chia sẻ các phụ thuộc trở nên không tương thích với nhau. Một ví dụ
include Pipfile
7 có thể như sau

thành lập. py

include Pipfile
1

Bạn có thể đặt các yêu cầu trong

include Pipfile
7 như đã trình bày ở trên, nhưng bạn cũng cần giữ các yêu cầu này trong tệp
include Pipfile
14
include Pipfile
15 để thiết lập môi trường thử nghiệm và phát triển

pipenv thay vì pip

include Pipfile
9 là một sự phát triển của
include Pipfile
14 cài đặt các gói, quản lý cả phụ thuộc trực tiếp và chuyển tiếp và quản lý môi trường ảo. Pipenv giải quyết vấn đề khó chịu về sự phụ thuộc của các phần phụ thuộc của bạn — các gói không được liệt kê trực tiếp trong
include Pipfile
3 của bạn—được cài đặt ở các phiên bản khác nhau giữa các bản dựng ngay cả khi mã của bạn không thay đổi. Vì lý do này và những lý do khác không được thảo luận trong blog này, chúng tôi quyết định sử dụng
include Pipfile
9

Không ai muốn quản lý các phụ thuộc trong nhiều tệp

Xem xét kịch bản này

Tôi là nhà phát triển đang xây dựng thư viện tuyệt vời tiếp theo, my-awesome-library. Tôi hiện đang sử dụng

include Pipfile
9 để cung cấp môi trường dành cho nhà phát triển của mình. Khi tôi cần một gói mới để phát triển, tôi thêm nó vào
include Pipfile
3 của mình và tiếp tục công việc hàng ngày của mình. Điều này theo dõi các phụ thuộc của tôi cho tôi và thậm chí bảo vệ tôi khỏi các phụ thuộc bắc cầu khó chịu. Những phần phụ thuộc này đã được nâng cấp bên dưới tôi trước đây và đã phá vỡ hoàn toàn thư viện tuyệt vời của tôi. Rất may,
include Pipfile
10 đã ngăn chặn điều này cho đến khi tôi sẵn sàng cập nhật các thư viện này. Vấn đề ở đây là tất cả các phụ thuộc của tôi hiện được lưu trữ trong
include Pipfile
3 của tôi. Tôi cần thêm một phần vào
include Pipfile
7 của mình có tên là
include Pipfile
1 để chỉ định những phần phụ thuộc bên ngoài mà thư viện của tôi có. Tôi giải quyết điều này như thế nào?

Yêu cầu

  • Tôi muốn có một tệp duy nhất để quản lý các phụ thuộc của mình
  • Tôi muốn có thể dễ dàng tạo một môi trường có cài đặt các phụ thuộc này
Đã thử Giải pháp 1 — Bị từ chối

Duy trì các phụ thuộc của tôi trong cả

import tomldef get_install_requirements[]:
try:
# read my pipfile
with open ['Pipfile', 'r'] as fh:
pipfile = fh.read[]
# parse the toml
pipfile_toml = toml.loads[pipfile]
except FileNotFoundError:
return []
# if the package's key isn't there then just return an empty list
try:
required_packages = pipfile_toml['packages'].items[]
except KeyError:
return []
# If a version/range is specified in the Pipfile honor it
# otherwise just list the package
return ["{0}{1}".format[pkg,ver] if ver != "*"
else pkg for pkg,ver in required_packages]
setup[
# other keyword arguments omitted
install_requires = get_install_requirements[],
]
86 và
include Pipfile
2

Đây có lẽ là cách triển khai phổ biến nhất. Không có gì đặc biệt sai với việc triển khai này, ngoại trừ các phần phụ thuộc của tôi được phân chia giữa hai tệp

Bạn có thể gặp lỗi nếu chỉ định một phiên bản cụ thể trong

include Pipfile
3 của mình

import tomldef get_install_requirements[]:
try:
# read my pipfile
with open ['Pipfile', 'r'] as fh:
pipfile = fh.read[]
# parse the toml
pipfile_toml = toml.loads[pipfile]
except FileNotFoundError:
return []
# if the package's key isn't there then just return an empty list
try:
required_packages = pipfile_toml['packages'].items[]
except KeyError:
return []
# If a version/range is specified in the Pipfile honor it
# otherwise just list the package
return ["{0}{1}".format[pkg,ver] if ver != "*"
else pkg for pkg,ver in required_packages]
setup[
# other keyword arguments omitted
install_requires = get_install_requirements[],
]
86

import tomldef get_install_requirements[]:
try:
# read my pipfile
with open ['Pipfile', 'r'] as fh:
pipfile = fh.read[]
# parse the toml
pipfile_toml = toml.loads[pipfile]
except FileNotFoundError:
return []
# if the package's key isn't there then just return an empty list
try:
required_packages = pipfile_toml['packages'].items[]
except KeyError:
return []
# If a version/range is specified in the Pipfile honor it
# otherwise just list the package
return ["{0}{1}".format[pkg,ver] if ver != "*"
else pkg for pkg,ver in required_packages]
setup[
# other keyword arguments omitted
install_requires = get_install_requirements[],
]
8

…và sau đó chỉ định một phạm vi trong

include Pipfile
7 của bạn không tương thích

include Pipfile
2 với phạm vi gói được xác định

include Pipfile
5

Nếu bạn chạy một

include Pipfile
52 để thử nghiệm gói cục bộ, điều này sẽ gây ra một lỗi không quá khó để sửa, nhưng có thể sẽ gây ra một số lời tục tĩu ngắn gọn. Mục tiêu của chúng ta là tránh xích mích đó

Đã thử Giải pháp 2 — Bị từ chối

Yêu cầu

import tomldef get_install_requirements[]:
try:
# read my pipfile
with open ['Pipfile', 'r'] as fh:
pipfile = fh.read[]
# parse the toml
pipfile_toml = toml.loads[pipfile]
except FileNotFoundError:
return []
# if the package's key isn't there then just return an empty list
try:
required_packages = pipfile_toml['packages'].items[]
except KeyError:
return []
# If a version/range is specified in the Pipfile honor it
# otherwise just list the package
return ["{0}{1}".format[pkg,ver] if ver != "*"
else pkg for pkg,ver in required_packages]
setup[
# other keyword arguments omitted
install_requires = get_install_requirements[],
]
86 của tôi cài đặt các gói phụ thuộc của gói của tôi bằng cách cài đặt chính thư viện tuyệt vời của tôi

Với

include Pipfile
9, có thể cài đặt thư viện mà bạn đang làm việc nhằm cố gắng cài đặt các phần phụ thuộc của thư viện

import tomldef get_install_requirements[]:
try:
# read my pipfile
with open ['Pipfile', 'r'] as fh:
pipfile = fh.read[]
# parse the toml
pipfile_toml = toml.loads[pipfile]
except FileNotFoundError:
return []
# if the package's key isn't there then just return an empty list
try:
required_packages = pipfile_toml['packages'].items[]
except KeyError:
return []
# If a version/range is specified in the Pipfile honor it
# otherwise just list the package
return ["{0}{1}".format[pkg,ver] if ver != "*"
else pkg for pkg,ver in required_packages]
setup[
# other keyword arguments omitted
install_requires = get_install_requirements[],
]
86 với cài đặt có thể chỉnh sửa

include Pipfile
0

Điều này có thể hoạt động, nhưng tôi đã gặp phải sự phụ thuộc vòng tròn cài đặt con gà và quả trứng [cố gắng cài đặt một gói mà tôi yêu cầu nhập trong quá trình thiết lập của mình. py]

include Pipfile
2 với
include Pipfile
57

include Pipfile
3

Với một

include Pipfile
7 như thế này,
include Pipfile
9 cố gắng cài đặt my-awesome-library, nhưng để chạy gói, nó cần có
include Pipfile
00, chưa được cài đặt. Nhưng chúng tôi không thể chạy
include Pipfile
7 để cài đặt mà không có
include Pipfile
00. Thiết lập này có thể dẫn đến đau lòng theo số lượng [điểm thưởng nếu bạn nhận được tham chiếu đó]. Nếu bạn không thực hiện bất kỳ loại xử lý nào trong
include Pipfile
7 yêu cầu thư viện bên ngoài, thì phương pháp này có thể được chấp nhận. Nhưng ngay sau khi bạn thêm một phụ thuộc bên ngoài, tất cả các cược sẽ bị tắt

Quan trọng hơn, tôi vẫn đang quản lý hai tệp cho tất cả các phụ thuộc của mình và điều đó sẽ không xảy ra

Đã thử Giải pháp 3 — Được chấp nhận

Chỉ có các phụ thuộc trong

import tomldef get_install_requirements[]:
try:
# read my pipfile
with open ['Pipfile', 'r'] as fh:
pipfile = fh.read[]
# parse the toml
pipfile_toml = toml.loads[pipfile]
except FileNotFoundError:
return []
# if the package's key isn't there then just return an empty list
try:
required_packages = pipfile_toml['packages'].items[]
except KeyError:
return []
# If a version/range is specified in the Pipfile honor it
# otherwise just list the package
return ["{0}{1}".format[pkg,ver] if ver != "*"
else pkg for pkg,ver in required_packages]
setup[
# other keyword arguments omitted
install_requires = get_install_requirements[],
]
86 của tôi và đọc chúng trong
include Pipfile
2 của tôi khi xây dựng

Với giải pháp này, chúng ta phải thực thi các tiêu chuẩn này

  • Chỉ các gói phụ thuộc trực tiếp vào thư viện mới được đặt trong phần
    include Pipfile
    06 của
    include Pipfile
    3
  • Bất kỳ gói, công cụ, thư viện nào khác mà chúng tôi cần để phát triển được đặt trong phần
    include Pipfile
    08 của
    include Pipfile
    3

Bằng cách thêm đoạn mã sau vào

include Pipfile
7 của bạn, đối số từ khóa
include Pipfile
1 được điền khi tệp được thực thi [i. e. , lúc xây dựng, lúc cài đặt cục bộ]

include Pipfile
2

include Pipfile
9

Bằng cách này, chúng tôi có thể chỉ định tất cả các phụ thuộc của mình trong

include Pipfile
3, bao gồm các phiên bản và phạm vi cụ thể. Nếu không có phiên bản nào được chỉ định [_______434 trong
include Pipfile
3] thì sẽ không có phiên bản nào được chỉ định trong
include Pipfile
1

import tomldef get_install_requirements[]:
try:
# read my pipfile
with open ['Pipfile', 'r'] as fh:
pipfile = fh.read[]
# parse the toml
pipfile_toml = toml.loads[pipfile]
except FileNotFoundError:
return []
# if the package's key isn't there then just return an empty list
try:
required_packages = pipfile_toml['packages'].items[]
except KeyError:
return []
# If a version/range is specified in the Pipfile honor it
# otherwise just list the package
return ["{0}{1}".format[pkg,ver] if ver != "*"
else pkg for pkg,ver in required_packages]
setup[
# other keyword arguments omitted
install_requires = get_install_requirements[],
]
86

include Pipfile
5

Bạn cũng sẽ cần thêm

include Pipfile
3 vào
include Pipfile
4 của mình để xây dựng
include Pipfile
5

include Pipfile
91

include Pipfile

Bây giờ bạn có một tệp duy nhất chứa các phụ thuộc thư viện của bạn cũng có thể được sử dụng để tạo môi trường phát triển

Nếu bạn cần các gói khác để phát triển, thử nghiệm hoặc linting, bạn có thể thêm chúng vào phần

include Pipfile
92

gói phát triển

include Pipfile
0Kết luận

Một nguồn sự thật duy nhất để quản lý các dự án Python của chúng tôi đã làm cho quá trình phát triển trở nên suôn sẻ hơn rõ rệt. Việc sử dụng

include Pipfile
9 vẫn cho phép chúng tôi xác định và đảm bảo cùng một phiên bản thư viện được cài đặt mỗi lần. Và vì chúng tôi lưu trữ
include Pipfile
10 trong kiểm soát phiên bản, nên rất dễ dàng quay lại phiên bản trước nếu sự phụ thuộc leo thang cái đầu xấu xí của nó. Tôi không còn phải lo lắng về các gói phụ thuộc và có thể tập trung toàn bộ sự chú ý vào mã của mình. Đó là cách nó nên được

Làm cách nào để cài đặt yêu cầu txt trong Python?

Sử dụng các yêu cầu -r cài đặt pip. lệnh txt để cài đặt tất cả các gói và mô-đun Python được liệt kê trong yêu cầu của bạn. tập tin txt.

Làm cách nào để sử dụng thiết lập py trong Python?

Tạo thiết lập. py .
Trong cửa sổ Project tool, chọn gói. Sau đó, từ menu chính, chọn Công cụ. Tạo thiết lập. py
Trong hộp thoại Tập lệnh thiết lập mới, chỉ định tên gói, phiên bản, tác giả, email của tác giả, mô tả gói và mọi chi tiết giấy phép
Nhấn OK khi đã sẵn sàng

Tôi nên sử dụng thiết lập py hay thiết lập cfg?

tệp cfg có thể phù hợp hơn . thiết lập. cfg là một tệp ini, chứa các tùy chọn mặc định để thiết lập. lệnh py. Bạn có thể chỉ định khá nhiều từ khóa mà chúng tôi đã sử dụng trong quá trình thiết lập. py trong thiết lập mới.

Làm cách nào để xây dựng gói Python với thiết lập py?

Cài đặt Gói Python với Thiết lập. py . py, mở cửa sổ lệnh hoặc cửa sổ đầu cuối và. cd vào thư mục gốc nơi thiết lập. py được định vị . Nhập. thiết lập trăn. cài đặt py .

Chủ Đề