Có ai gặp cảnh báo này khi thực thi python setup.py install
gói PyPI không?
install_requires
xác định những gì gói yêu cầu. Rất nhiều gói PyPI có tùy chọn này. Làm thế nào nó có thể là một "tùy chọn phân phối không xác định"?
Có ai gặp cảnh báo này khi thực thi python setup.py install
gói PyPI không?
install_requires
xác định những gì gói yêu cầu. Rất nhiều gói PyPI có tùy chọn này. Làm thế nào nó có thể là một "tùy chọn phân phối không xác định"?
Câu trả lời:
python setup.py
sử dụng các bản phân phối không hỗ trợ install_requires. setuptools cũng phân phối (kế nhiệm của nó) và pip (sử dụng một trong hai). Nhưng bạn thực sự phải sử dụng chúng. Tức là gọi setuptools thông qua easy_install
lệnh hoặc pip install
.
Một cách khác là nhập thiết lập từ setuptools trong setup.py của bạn, nhưng điều này không chuẩn và khiến mọi người muốn sử dụng gói của bạn phải cài đặt setuptools.
pip
, sau đó làm cách nào để chạy setup.py
tệp nếu tôi chỉ muốn tạo tiện ích mở rộng tại chỗ?
python setup.py sdist
và cài đặt nó với pip install resulting_package.tar.gz
. Bạn cũng có thể sử dụng pip install -e
để cài đặt trực tiếp từ nguồn, nhưng tôi luôn ưu tiên cài đặt từ gói hoặc từ kho lưu trữ trực tiếp ..
pip install pendulum==1.4.4
. Đang chạy pip install setuptools --upgrade
đã xóa lỗi.
Đây là kết quả đầu tiên trên google tìm kiếm của tôi, nhưng không có câu trả lời. Tôi thấy rằng việc nâng cấp các công cụ thiết lập đã giải quyết được vấn đề cho tôi (và pip là biện pháp tốt)
pip install --upgrade pip
pip install --upgrade setuptools
Hy vọng điều này sẽ giúp những người tiếp theo tìm thấy liên kết này!
pip3 install neovim-remote
.)
CHÚ Ý ! CHÚ Ý ! Câu trả lời không hoàn hảo ở phía trước. Để có được "bản ghi nhớ mới nhất" về trạng thái đóng gói trong vũ trụ Python, hãy đọc bài luận khá chi tiết này .
Tôi vừa gặp sự cố này khi cố gắng xây dựng / cài đặt ansible. Vấn đề dường như là bản phân phối thực sự không hỗ trợ install_requires. Setuptools nên nhanh chóng vá các distutils, nhưng điều đó không xảy ra, có thể là do bản phát hành cuối cùng của setuptools là 0.6c11 từ năm 2009, trong khi distutils là một dự án Python cốt lõi.
Vì vậy, ngay cả sau khi cài đặt thủ công setuptools-0.6c11-py2.7.egg đang chạy setup.py chỉ chọn distutils dist.py, chứ không phải từ site-package / setuptools /.
Ngoài ra, tài liệu setuptools cũng gợi ý cách sử dụng ez_setup chứ không phải distutils.
Tuy nhiên, bản thân setuptools được cung cấp bởi phân phối ngày nay và hương vị của setup () hỗ trợ install_requires.
setuptools
và distribute
dự án đang trong quá trình hợp nhất trở lại với nhau, nhưng việc hợp nhất vẫn chưa hoàn thành (Tôi sẽ cập nhật bài luận này ngay khi thay đổi). " Có ai biết tình trạng của mọi thứ cho đến nay là gì vào năm 2019 không? Với ngày End of Life của Python 2.7 đang nhanh chóng đến gần, rất nhiều gói python sẽ đang trong quá trình cập nhật và đóng gói lại.
Tôi đang sử dụng máy Mac với python 2.7.11. Tôi đã thử thách với việc tạo ra các dự án cực kỳ đơn giản và dễ hiểu, trong đó yêu cầu duy nhất của tôi là tôi có thể chạy python setup.py install
và setup.py
sử dụng lệnh thiết lập, lý tưởng là từ các bản phân phối. Thực sự không có nhập khẩu hoặc mã nào khác ngoài kwargs setup()
ngoài những gì tôi lưu ý ở đây.
Tôi gặp lỗi khi nhập cho setup.py
tệp của mình là:
from distutils.core import setup
Khi tôi sử dụng điều này, tôi nhận được các cảnh báo như
/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/dist.py:267: UserWarning: Tùy chọn phân phối không xác định: 'entry_points' warning.warn ( tin nhắn)
Nếu tôi thay đổi các mục nhập (và không có gì khác ) thành như sau:
from distutils.core import setup
import setuptools # noqa
Các cảnh báo biến mất.
Lưu ý rằng tôi không sử dụng setuptools
, chỉ cần nhập nó sẽ thay đổi hành vi để nó không còn phát ra cảnh báo nữa. Đối với tôi, đây là nguyên nhân của sự khác biệt thực sự khó hiểu khi một số dự án tôi đang sử dụng đưa ra những cảnh báo đó, còn một số dự án khác thì không.
Rõ ràng, một số hình thức vá lỗi đang diễn ra và nó bị ảnh hưởng bởi việc nhập khẩu đó có được thực hiện hay không. Đây có lẽ không phải là tình huống cho tất cả mọi người nghiên cứu vấn đề này, nhưng đối với môi trường chật hẹp mà tôi đang làm việc, đây là câu trả lời mà tôi đang tìm kiếm.
Điều này phù hợp với nhận xét khác (cộng đồng), nói rằng các bản phân phối nên hỗ trợ thiết lập các công cụ cài đặt khỉ và họ đã gặp sự cố khi cài đặt Ansible. Ansible dường như đã cố gắng cho phép cài đặt mà không cần cài đặt công cụ trong quá khứ và sau đó quay lại điều đó.
https://github.com/ansible/ansible/blob/devel/setup.py
Rất nhiều thứ đang được phát hành ... nhưng nếu bạn đang tìm kiếm câu trả lời đơn giản cho một dự án đơn giản, có lẽ bạn chỉ nên nhập các công cụ thiết lập.
import setuptools
cũng giải quyết vấn đề một cách thần kỳ cho tôi trên ubuntu 16.04 với python 3.5.
Đây là cảnh báo từ các bản phân phối và là dấu hiệu cho thấy bạn chưa cài đặt các công cụ thiết lập. Cài đặt nó từ http://pypi.python.org/pypi/setuptools sẽ loại bỏ cảnh báo.
sudo apt-get install python-dev # for python2.x installs
sudo apt-get install python3-dev # for python3.x installs
Nó sẽ cài đặt bất kỳ tiêu đề nào bị thiếu. Nó đã giải quyết vấn đề của tôi
Kết luận :
distutils
không hỗ trợ install_requires
hoặc entry_points
, setuptools
không.
thay đổi from distutils.core import setup
trong setup.py thành from setuptools import setup
hoặc cấu trúc lại setup.py của bạn để chỉ sử dụng distutils
các tính năng.
Tôi đến đây bởi vì tôi không nhận ra entry_points
đó chỉ là một setuptools
tính năng.
Nếu bạn đang ở đây muốn chuyển đổi setuptools
để distutils
thích tôi:
install_requires
từ setup.py và chỉ sử dụng requirements.txt vớipip
entry_points
thành scripts
( doc ) và cấu trúc lại bất kỳ mô-đun nào dựa vào entry_points
để trở thành các tập lệnh đầy đủ với shebangs và một điểm vào.Theo như tôi có thể nói, đây là một lỗi trong setuptools, nơi nó không loại bỏ các tùy chọn cụ thể của setuptools trước khi gọi lên lớp cơ sở trong thư viện chuẩn: https://bitbucket.org/pypa/setuptools/issue/29 / tránh-cảnh báo người dùng-phát-ra-khi-gọi
Nếu bạn có một điều kiện vô điều kiện import setuptools
trong của bạn setup.py
(như bạn nên làm nếu sử dụng các tùy chọn cụ thể của setuptools), thì thực tế là tập lệnh không bị lỗi ImportError
chỉ ra rằng setuptools đã được cài đặt đúng cách.
Bạn có thể tắt tiếng cảnh báo như sau:
python -W ignore::UserWarning:distutils.dist setup.py <any-other-args>
Chỉ làm điều này nếu bạn sử dụng nhập vô điều kiện sẽ thất bại hoàn toàn nếu công cụ thiết lập không được cài đặt :)
(Tôi thấy hành vi tương tự này trong một thanh toán từ kho công cụ thiết lập sau hợp nhất, đó là lý do tại sao tôi tự tin rằng đó là lỗi thiết lập công nghệ thay vì vấn đề cấu hình hệ thống. Tôi hy vọng bản phân phối trước hợp nhất sẽ gặp vấn đề tương tự)
Bây giờ tôi đã thấy điều này trong các công cụ kế thừa sử dụng Python2.7, trong đó một bản dựng (như Dockerfile) cài đặt phần phụ thuộc không được ghim, ví dụ như pytest. PyTest đã bỏ hỗ trợ Python 2.7, vì vậy bạn có thể cần chỉ định phiên bản <bản phát hành gói mới.
Hoặc cắn viên đạn và chuyển đổi ứng dụng đó sang Python 3 nếu điều đó khả thi.