2014-04-12 7 views
10

पहले मैं स्वयं एक Makefile कि कुछ इस तरह देखा उपयोग कर रहा था:tox साथ virtualenv पुनर्स्थापित जब requirements.txt या setup.py में परिवर्तन

.PHONY: all 
all: tests 

.PHONY: tests 
tests: py_env 
    bash -c 'source py_env/bin/activate && py.test tests' 

py_env: requirements_dev.txt setup.py 
    rm -rf py_env 
    virtualenv py_env 
    bash -c 'source py_env/bin/activate && pip install -r requirements_dev.txt' 

यह अच्छा पक्ष प्रभाव था अगर मैं requirements_dev.txt बदल कि या setup.py, यह मेरे वर्चुअलएनवी का पुनर्निर्माण करेगा। लेकिन थोड़ा सा गड़बड़ महसूस करता है।

मैं इसी तरह की चीज करने के लिए tox का उपयोग करना चाहता हूं। मैं समझता हूं कि tox में --recreate विकल्प है, लेकिन मुझे इसकी आवश्यकता होने पर केवल पर कॉल करना होगा।

# Makefile 
.PHONY: all 
all: tests 

.PHONY: tests 
tests: 
    tox 

और

# tox.ini 
[tox] 
project = my_project 
envlist = py26,py27 

[testenv] 
install_command = pip install --use-wheel {opts} {packages} 
deps = -rrequirements_dev.txt 
commands = 
    py.test {posargs:tests} 

एक आदर्श समाधान है, tox में सिर्फ बातें प्रयोग करेंगे लेकिन एक स्वीकार्य समाधान Makefile और --recreate ध्वज शामिल होगा:

मेरा नया सेटअप कुछ इस तरह है।

+0

मुझे यह जवाब भी चाहिए। – bukzor

उत्तर

10

इस समस्या के लिए टोक्स में एक खुली समस्या प्रतीत होती है।

https://github.com/tox-dev/tox/issues/149 (क्लिक करें और अपनी टिप्पणी जोड़ने और मतदान, लेखकों कैसे आम मुद्दा है के बारे में जागरूक बनाने)

हम या तो एक पैच या काम प्रस्तुत करने के लिए इसके चारों ओर की आवश्यकता होगी। वर्कअराउंड जो दिमाग में आता है:

  1. सूची निर्भरता सीधे tox.ini में। यह सुनिश्चित करने के लिए कि आपके tox.ini requirements.txt के साथ सिंक में रहता है, अपने निर्माण प्रणाली का उपयोग करें।
  2. अपने मेकफ़ाइल में एक नियम जोड़ें जो एक tox करता है - जब भी rescue.txt बदलता है तो सुधार करें।

वर्कअराउंड 2 सबसे सरल लगता है।

3

यहाँ Makefile वैकल्पिक हल मैं के साथ जा रहा समाप्त हो गया है:

REBUILD_FLAG = 

.PHONY: all 
all: tests 

.PHONY: tests 
tests: .venv.touch 
    tox $(REBUILD_FLAG) 

.venv.touch: setup.py requirements.txt requirements_dev.txt 
    $(eval REBUILD_FLAG := --recreate) 
    touch .venv.touch 

उदाहरण:

$ make tests 
touch .venv.touch 
tox --recreate 
[[ SNIP ]] 
$ make tests 
tox 
[[ SNIP ]] 
$ touch requirements.txt 
$ make tests 
touch .venv.touch 
tox --recreate 
[[ SNIP ]] 
0

इस हल करने के लिए दृढ संकल्प है, मैं इसे पूरा करने के लिए एक tox प्लगइन लिखा है: https://github.com/asottile/tox-pip-extensions

प्लगइन वर्चुअलनेव सृजन में हुक करता है और सिंक्रनाइज़ेशन को कॉन्फ़िगर करने के लिए venv-update का उपयोग करता है।

उपयोग बिल्कुल स्पष्ट है:

  • tox के साथ स्थापित tox-pip-extensions (मेरे सेटअप में, मैं स्थापित tox और tox-pip-extensions साथ ~/venv पर एक virtualenv है, और फिर सांकेतिक रूप से लिंक ~/venv/bin/tox ->~/bin/tox)
  • सक्षम निम्नानुसार विस्तार:

    [tox] 
    tox_pip_extensions_ext_venv_update = true 
    # the rest of your tox.ini file as normal... 
    
संबंधित मुद्दे