commit:     e0b3f694ceda2d7220431ee7b27011877bbd3230
Author:     Justin Lecher <jlec <AT> gentoo <DOT> org>
AuthorDate: Sun Jan 17 15:23:04 2016 +0000
Commit:     Justin Lecher <jlec <AT> gentoo <DOT> org>
CommitDate: Sun Jan 17 15:23:30 2016 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=e0b3f694

dev-python/virtualenv: Backport fix for python3.5

Gentoo-Bug: https://bugs.gentoo.org/show_bug.cgi?id=571172

Package-Manager: portage-2.2.26
Signed-off-by: Justin Lecher <jlec <AT> gentoo.org>

 .../virtualenv-13.1.2-PYTHONPATH-backport.patch    | 144 +++++++++++++++++++++
 dev-python/virtualenv/virtualenv-13.1.2-r1.ebuild  |  52 ++++++++
 2 files changed, 196 insertions(+)

diff --git 
a/dev-python/virtualenv/files/virtualenv-13.1.2-PYTHONPATH-backport.patch 
b/dev-python/virtualenv/files/virtualenv-13.1.2-PYTHONPATH-backport.patch
new file mode 100644
index 0000000..0e48643
--- /dev/null
+++ b/dev-python/virtualenv/files/virtualenv-13.1.2-PYTHONPATH-backport.patch
@@ -0,0 +1,144 @@
+ docs/changes.rst |  3 ++
+ virtualenv.py    | 92 +++++++++++++++++++++++++++++---------------------------
+ 2 files changed, 50 insertions(+), 45 deletions(-)
+
+diff --git a/docs/changes.rst b/docs/changes.rst
+index 80c3dc1..1d9c1fe 100644
+--- a/docs/changes.rst
++++ b/docs/changes.rst
+@@ -1,6 +1,9 @@
+ Release History
+ ===============
+ 
++* Remove virtualenv file's path from directory when executing with a new
++  python. Fixes issue #779, #763 (PR #805)
++
+ 13.1.2 (2015-08-23)
+ ~~~~~~~~~~~~~~~~~~~
+ 
+diff --git a/virtualenv.py b/virtualenv.py
+index da25205..64e70d4 100755
+--- a/virtualenv.py
++++ b/virtualenv.py
+@@ -5,9 +5,22 @@
+ __version__ = "13.1.2"
+ virtualenv_version = __version__  # legacy
+ 
+-import base64
+-import sys
+ import os
++import sys
++
++# If we are running in a new interpreter to create a virtualenv,
++# we do NOT want paths from our existing location interfering with anything,
++# So we remove this file's directory from sys.path - most likely to be
++# the previous interpreter's site-packages. Solves #705, #763, #779
++if os.environ.get('VIRTUALENV_INTERPRETER_RUNNING'):
++    del_paths = []
++    for path in sys.path:
++        if os.path.realpath(os.path.dirname(__file__)) == 
os.path.realpath(path):
++            del_paths.append(path)
++    for path in del_paths:
++        sys.path.remove(path)
++
++import base64
+ import codecs
+ import optparse
+ import re
+@@ -23,6 +36,11 @@ import struct
+ import subprocess
+ import tarfile
+ 
++try:
++    import ConfigParser
++except ImportError:
++    import configparser as ConfigParser
++
+ if sys.version_info < (2, 6):
+     print('ERROR: %s' % sys.exc_info()[1])
+     print('ERROR: this script requires Python 2.6 or greater.')
+@@ -33,11 +51,6 @@ try:
+ except NameError:
+     basestring = str
+ 
+-try:
+-    import ConfigParser
+-except ImportError:
+-    import configparser as ConfigParser
+-
+ join = os.path.join
+ py_version = 'python%s.%s' % (sys.version_info[0], sys.version_info[1])
+ 
+@@ -1096,45 +1109,34 @@ def change_prefix(filename, dst_prefix):
+ 
+ def copy_required_modules(dst_prefix, symlink):
+     import imp
+-    # If we are running under -p, we need to remove the current
+-    # directory from sys.path temporarily here, so that we
+-    # definitely get the modules from the site directory of
+-    # the interpreter we are running under, not the one
+-    # virtualenv.py is installed under (which might lead to py2/py3
+-    # incompatibility issues)
+-    _prev_sys_path = sys.path
+-    if os.environ.get('VIRTUALENV_INTERPRETER_RUNNING'):
+-        sys.path = sys.path[1:]
+-    try:
+-        for modname in REQUIRED_MODULES:
+-            if modname in sys.builtin_module_names:
+-                logger.info("Ignoring built-in bootstrap module: %s" % 
modname)
+-                continue
+-            try:
+-                f, filename, _ = imp.find_module(modname)
+-            except ImportError:
+-                logger.info("Cannot import bootstrap module: %s" % modname)
++
++    for modname in REQUIRED_MODULES:
++        if modname in sys.builtin_module_names:
++            logger.info("Ignoring built-in bootstrap module: %s" % modname)
++            continue
++        try:
++            f, filename, _ = imp.find_module(modname)
++        except ImportError:
++            logger.info("Cannot import bootstrap module: %s" % modname)
++        else:
++            if f is not None:
++                f.close()
++            # special-case custom readline.so on OS X, but not for pypy:
++            if modname == 'readline' and sys.platform == 'darwin' and not (
++                    is_pypy or filename.endswith(join('lib-dynload', 
'readline.so'))):
++                dst_filename = join(dst_prefix, 'lib', 'python%s' % 
sys.version[:3], 'readline.so')
++            elif modname == 'readline' and sys.platform == 'win32':
++                # special-case for Windows, where readline is not a
++                # standard module, though it may have been installed in
++                # site-packages by a third-party package
++                pass
+             else:
+-                if f is not None:
+-                    f.close()
+-                # special-case custom readline.so on OS X, but not for pypy:
+-                if modname == 'readline' and sys.platform == 'darwin' and not 
(
+-                        is_pypy or filename.endswith(join('lib-dynload', 
'readline.so'))):
+-                    dst_filename = join(dst_prefix, 'lib', 'python%s' % 
sys.version[:3], 'readline.so')
+-                elif modname == 'readline' and sys.platform == 'win32':
+-                    # special-case for Windows, where readline is not a
+-                    # standard module, though it may have been installed in
+-                    # site-packages by a third-party package
+-                    pass
+-                else:
+-                    dst_filename = change_prefix(filename, dst_prefix)
+-                copyfile(filename, dst_filename, symlink)
+-                if filename.endswith('.pyc'):
+-                    pyfile = filename[:-1]
+-                    if os.path.exists(pyfile):
+-                        copyfile(pyfile, dst_filename[:-1], symlink)
+-    finally:
+-        sys.path = _prev_sys_path
++                dst_filename = change_prefix(filename, dst_prefix)
++            copyfile(filename, dst_filename, symlink)
++            if filename.endswith('.pyc'):
++                pyfile = filename[:-1]
++                if os.path.exists(pyfile):
++                    copyfile(pyfile, dst_filename[:-1], symlink)
+ 
+ 
+ def subst_path(prefix_path, prefix, home_dir):

diff --git a/dev-python/virtualenv/virtualenv-13.1.2-r1.ebuild 
b/dev-python/virtualenv/virtualenv-13.1.2-r1.ebuild
new file mode 100644
index 0000000..13c85a3
--- /dev/null
+++ b/dev-python/virtualenv/virtualenv-13.1.2-r1.ebuild
@@ -0,0 +1,52 @@
+# Copyright 1999-2016 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Id$
+
+EAPI=5
+
+PYTHON_COMPAT=( python2_7 python3_{3,4,5} pypy pypy3 )
+
+inherit distutils-r1
+
+DESCRIPTION="Virtual Python Environment builder"
+HOMEPAGE="
+       http://www.virtualenv.org/
+       https://pypi.python.org/pypi/virtualenv
+       https://github.com/pypa/virtualenv/
+"
+SRC_URI="https://github.com/pypa/${PN}/archive/${PV}.tar.gz -> ${P}.tar.gz"
+
+LICENSE="MIT"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~m68k ~mips ~ppc ~ppc64 ~s390 
~sh ~sparc ~x86 ~x86-fbsd ~x86-freebsd ~x86-interix ~amd64-linux ~x86-linux 
~ppc-macos ~x64-macos ~sparc-solaris ~x64-solaris ~x86-solaris"
+SLOT="0"
+IUSE="doc test"
+
+RDEPEND=""
+DEPEND="${RDEPEND}
+       dev-python/setuptools[${PYTHON_USEDEP}]
+       doc? ( dev-python/sphinx[${PYTHON_USEDEP}] )
+       test? (
+               dev-python/mock[${PYTHON_USEDEP}]
+               dev-python/pytest[${PYTHON_USEDEP}]
+       )"
+
+DOCS=( docs/index.rst docs/changes.rst )
+
+PATCHES=(
+       "${FILESDIR}"/${PN}-1.8.2-no-versioned-script.patch
+       "${FILESDIR}"/${PN}-12.1.1-skip-broken-test.patch
+       "${FILESDIR}"/${P}-PYTHONPATH-backport.patch
+)
+
+python_compile_all() {
+       use doc && emake -C docs html
+}
+
+python_test() {
+       py.test -v -v || die "Tests fail with ${EPYTHON}"
+}
+
+python_install_all() {
+       use doc && local HTML_DOCS=( "${S}"/docs/_build/html/. )
+       distutils-r1_python_install_all
+}

Reply via email to