New issue 112: support setup.py scripts that build multiple packages
https://bitbucket.org/hpk42/tox/issue/112/support-setuppy-scripts-that-build

Peter Feiner:

I'd like to be able to use tox with setup.py scripts that build multiple 
packages (i.e., they make multiple setup() calls). The problem is that tox only 
installs the sdist zip archive from _one_ package into the venv instead of 
installing all of them. Here's a minimal example:

```
#!sh
peter@gremlin ~/foobar % find . 
.
./tox.ini
./setup.py
peter@gremlin ~/foobar % cat tox.ini
[tox]
envlist=py27

[testenv]
whitelist_externals=true
commands=true
peter@gremlin ~/foobar % cat setup.py 
#!/usr/bin/env python
from distutils.core import setup
setup(name='foo', install_requires=['bar'])
setup(name='bar')
peter@gremlin ~/foobar % tox -v
using tox.ini: /home/peter/foobar/tox.ini
using tox-1.5.0 from /usr/local/lib/python2.7/dist-packages/tox/__init__.pyc
GLOB sdist-make: /home/peter/foobar/setup.py
  /home/peter/foobar$ /usr/bin/python /home/peter/foobar/setup.py sdist 
--formats=zip --dist-dir /home/peter/foobar/.tox/dist 
>/home/peter/foobar/.tox/log/tox-0.log
py27 create: /home/peter/foobar/.tox/py27
  /home/peter/foobar/.tox$ /usr/bin/python2.7 
/usr/local/lib/python2.7/dist-packages/virtualenv.py --setuptools py27 
>/home/peter/foobar/.tox/py27/log/py27-0.log
py27 inst: /home/peter/foobar/.tox/dist/foo-0.0.0.zip
  /home/peter/foobar/.tox/py27/log$ /home/peter/foobar/.tox/py27/bin/pip 
install /home/peter/foobar/.tox/dist/foo-0.0.0.zip 
>/home/peter/foobar/.tox/py27/log/py27-1.log
ERROR: invocation failed, logfile: /home/peter/foobar/.tox/py27/log/py27-1.log
ERROR: actionid=py27
msg=installpkg
cmdargs=[local('/home/peter/foobar/.tox/py27/bin/pip'), 'install', 
'/home/peter/foobar/.tox/dist/foo-0.0.0.zip']
env={'PYTHONIOENCODING': 'utf_8', 'SSH_CLIENT': '192.168.1.207 59563 22', 
'LOGNAME': 'peter', 'USER': 'peter', 'HOME': '/home/peter', 'PATH': 
'/home/peter/foobar/.tox/py27/bin:/home/peter/test:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games',
 'LANG': 'en_US.UTF-8', 'TERM': 'xterm-256color', 'SHELL': '/bin/zsh', 'SHLVL': 
'1', 'PWD': '/home/peter/foobar', 'EDITOR': 'vim', 'OS_USERNAME': 'admin', 
'OS_TENANT_NAME': 'admin', 'OS_PASSWORD': 'admin', '_': '/usr/local/bin/tox', 
'SSH_CONNECTION': '192.168.1.207 59563 96.45.203.162 22', 'SSH_TTY': 
'/dev/pts/74', 'OLDPWD': '/home/peter', 'OS_AUTH_URL': 
'http://192.168.16.3:5000/v2.0/', 'MAIL': '/var/mail/peter', 'LS_COLORS': 
'rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=
 
01;31:*.lz=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.axa=00;36:*.oga=00;36:*.spx=00;36:*.xspf=0
 0;36:', 'PAGER': 'less'}
Unpacking /home/peter/foobar/.tox/dist/foo-0.0.0.zip
  Running setup.py egg_info for package from 
file:///home/peter/foobar/.tox/dist/foo-0.0.0.zip
    
    
Downloading/unpacking bar (from foo==0.0.0)
  Could not find any downloads that satisfy the requirement bar (from 
foo==0.0.0)
Cleaning up...
No distributions at all found for bar (from foo==0.0.0)
Storing complete log in /home/peter/.pip/pip.log

_______________________________________________________________________________________________________________________________________
 summary 
_______________________________________________________________________________________________________________________________________
ERROR:   py27: InvocationError: /home/peter/foobar/.tox/py27/bin/pip install 
/home/peter/foobar/.tox/dist/foo-0.0.0.zip (see 
/home/peter/foobar/.tox/py27/log/py27-1.log)
```

Here's a hacky patch to get the job done:

```
#!sh
diff -r 3be5bca16f8b tox/_venv.py
--- a/tox/_venv.py      Thu Aug 08 13:27:01 2013 +0200
+++ b/tox/_venv.py      Thu Aug 08 14:48:38 2013 -0400
@@ -245,7 +245,9 @@
         else:
             action.setactivity("inst-nodeps", sdistpath)
             extraopts = ['-U', '--no-deps']
-        self._install([sdistpath], extraopts=extraopts, action=action)
+        import glob
+        sdistpaths = glob.glob('%s/*.zip' % sdistpath.dirname)
+        self._install(sdistpaths, extraopts=extraopts, action=action)
 
     def install_deps(self, action=None):
         if action is None:
```

I could prepare a proper patch if there's interest.


_______________________________________________
pytest-commit mailing list
pytest-commit@python.org
http://mail.python.org/mailman/listinfo/pytest-commit

Reply via email to