2012-03-07 59 views
27

在討伐令我的應用程序pip -installable,我打大的戰鬥與setuptoolsdistribute。我假設我的依賴關係是正確的,即安裝pip install myapp應該可以正確填充虛擬環境。不過,我想簡化開發,而我在這,所以我的目標是先建立一個空virtualenv,使setup.py test(後來setup.py develop,但是這是一個完全不同的戰鬥)與所有定義的依賴填充它。如何強制`setup.py test`將依賴關係安裝到我的`virtualenv`中?

現在我的問題是:無論我多麼努力地嘗試,我所得到的只是依賴項安裝爲.egg s在我的項目目錄中,這至少是次優的。我試圖創建一個新的setuptools命令,它會使用pip(這似乎工作,即使笨拙),但不能認真地是溶液(子類和壓倒一切的即是)。

那麼我該如何讓setup.py test填寫virtualevn而不是我的工作目錄?

+0

你能你的'蟒蛇setup.py develop'命令的輸出添加到這個問題?當我在virtualenv中運行它時,它將依賴關係安裝到我的virtualenv中。 – Chris 2012-04-28 21:04:49

+0

@Chris:不是'tests_requires'依賴關係。 – Flimm 2013-03-25 10:51:29

回答

11

按照設計,您不能使tests_requiressetup_requires項進入虛擬環境。這個想法是將執行測試/設置所需的東西與實際使用正在安裝的軟件包所需的東西分開。例如,我可能會要求在我的軟件包上運行測試時需要「覆蓋」模塊,但它並未被我的任何代碼使用。因此,如果我在運行測試時沒有在自己的環境中進行「覆蓋」,如果我的軟件包不需要它,我不希望將「覆蓋率」安裝到環境中。

+2

那麼tests_requires的目的是什麼? – 2014-11-09 06:18:15

+2

在某些情況下,您的測試可能會有一個額外的依賴項,您的程序包沒有執行其測試。一個特殊的例子是「鼻子」包,它可能永遠不會在你的項目的其他任何地方使用,但測試。這使您可以在不進行測試的情況下發運包裝,而不會讓用戶不需要依賴,以使包裝正常工作。 – 2014-11-19 21:59:40

+4

我的意思是test_requires的目的,如果它只是被忽略......我完全錯過了它不會被忽略做'setup.py測試'/ venv行爲似乎令人驚訝,我明白它不應該是默認的,但是你應該可以強制pip安裝test_requires ... http:// stackoverflow。com/a/15422703/1240268 – 2014-11-20 00:19:48

-5

如果您使用的是setuptools,則可以使用setup方法的tests_require關鍵字參數指定測試依賴關係。

from setuptools import setup 

setup(
    name='your-package-name', 
    version='1.0.0', 
    author='me', 
    author_email='[email protected]', 
    install_requires=['Pygments>=1.4'], 
    tests_require=['nose'], 
    packages=[ 
     'your_package_name', 
    ], 
) 

當您運行python setup.py test,這將檢查nose如果不是已經可以使用pip它安裝到當前活動virtualenv

請注意,如果您使用distribute.core.setup(也不會有test命令可用),則此參數將被忽略。

+0

它不會在我的經驗中使用pip。 – Flimm 2013-03-25 10:50:33

+0

這正是OP所做的 - 結束了所有的.egg dirs – UloPe 2013-10-13 15:42:03

+5

這個答案顯然是不正確的。在[DOC](http://pythonhosted.org/setuptools/setuptools.html#new-and-changed-setup-keywords)指出,setuptools的將使用EasyInstall到'tests_require'軟件包安裝到「項目的設置目錄」,無論這可能意味着什麼 – bukzor 2014-01-07 22:55:52