2011-11-28 62 views
68

在執行PyPI包的python setup.py install時是否有人遇到此警告?pypi UserWarning:未知分發選項:'install_requires'

install_requires定義了軟件包的要求。很多PyPI包都有這個選項。它怎麼可能是一個「未知分配選項」?

+0

[在製作python包時向setup.py添加'install \ _requires']可能有重複(https://stackoverflow.com/questions/9810603/adding-install-requires-to-setup- py-when-making-a-python-package) – tripleee

+0

@tripleee也許,但是這個問題早於那個問題。 –

+0

[問題年齡是次要問題](https://meta.stackoverflow.com/questions/251938/should-i-flag-a-question-as-duplicate-if-it-has-received-better-answers)但我沒有強烈的意見。如果您希望重複提名的方式相反,可能會爲可見性創建一個[meta]問題。就我個人而言,另一個問題的接受答案對我更有幫助,因爲它更直接和專注。你似乎沒有接受任何這些答案,所以這是你實際上可以改變的一個因素。 – tripleee

回答

8

這是來自distutils的警告,並且表示您沒有安裝setuptools。 從http://pypi.python.org/pypi/setuptools安裝它將刪除警告。

+26

setuptools已安裝。仍然有警告。 –

+0

你說得很對,即使安裝了setuptools或者distribution,我也會在Python 2.6.6中得到這個錯誤。如果我嘗試使用2.7.2,它已經消失了。 –

+3

我在python 2.7.3中有這個問題 –

14

注意注意事項!前面的回答不完美。要獲得關於Python世界中包裝狀態的「最新備忘錄」,請閱讀this fairly detailed essay

我試圖構建/安裝ansible時遇到了這個問題。問題似乎是distutils確實doesn't support install_requires。 setuptools should monkey-patch distutils在運行中,但它不,可能是因爲從2009年開始setuptools的最新版本是0.6c11,而distutils是一個核心Python項目。

所以即使在手動安裝setuptools-0.6c11-py2.7.egg之後,運行setup.py也只會啓動distutils dist.py,而不會從site-packages/setuptools /啓動distutils。

此外,setuptools文檔提示使用ez_setup而不是distutils。

但是,現在setuptools本身是由distribute提供的,setup()支持install_requires。

+1

Downvoted,因爲這個答案包含了一些關於什麼是不同的東西的虛假和混淆。例如,ez_setup.py是setuptools的引導安裝程序,並不是人們使用的「替代」distutils。大多數PyPI軟件包不是「完全錯誤」的。 – Iguananaut

+1

@Iguananaut,感謝您審查答案;我編輯過它。 – PAStheLoD

+0

哦,很酷,謝謝。在這種情況下,我會重新投票贊成。)尼克·科格倫的文章與我的同事分享過,試圖讓他們圍繞這些東西進行思考。 – Iguananaut

60

python setup.py使用不支持install_requires的distutils。 setuptools也會分發(其後繼者)和pip(使用其中之一)。但你實際上必須使用它們。即通過easy_install命令或pip install調用setuptools。

另一種方法是從您的setup.py中的setuptools導入設置,但這不是標準的,並且使所有想要使用您的軟件包的人都必須安裝setuptools。

+3

假設我想使用'pip',那麼如果我只想在原地創建擴展名,那麼如何運行'setup.py'文件? –

+8

這個警告並不妨礙你打包你的代碼,所以你可以運行'python setup.py sdist'並用'pip installresolve_package.tar.gz'安裝它。你也可以使用'pip install -e'直接從源代碼安裝,但我總是喜歡直接從軟件包或從版本庫安裝。 –

+0

這有點搞砸了。你總是可以嘗試從setuptools首先導入設置,否則使用distutils並獲取警告。然而,如果它在pypy中,由於setuptools沒有正確關閉描述符(甚至在Debian上,默認ulimit -n爲1024),最終可能會出現「太多打開的文件」:https://bugs.pypy.org/問題878 – fiorix

2

據我所知,這是在setuptools的地方不是在標準庫中調用基類之前除去setuptools的特定選項的錯誤:https://bitbucket.org/pypa/setuptools/issue/29/avoid-userwarnings-emitted-when-calling

如果你有一個無條件import setuptools在你的setup.py(你應該如果使用setuptools特定的選項),那麼腳本沒有失敗的事實ImportError表明setuptools已正確安裝。

可以關閉該警告如下:

python -W ignore::UserWarning:distutils.dist setup.py <any-other-args> 

只有如果使用無條件進口,如果setuptools的沒有安裝:)

將完全失敗(我這樣做從合併後的setuptools回購中看到這種相同的行爲,這就是爲什麼我相信這是一個setuptools錯誤而不是系統配置問題。我希望預合併分發會有同樣的問題)

1
sudo apt-get install python-dev # for python2.x installs 
sudo apt-get install python3-dev # for python3.x installs 

它會安裝任何缺少的標題。它解決了我的問題