mirror of https://github.com/docker/compose.git
Don't import pip inside Compose
Signed-off-by: Joffrey F <joffrey@docker.com>
This commit is contained in:
parent
40c26ca676
commit
66f4a795a2
|
@ -0,0 +1,37 @@
|
||||||
|
from __future__ import absolute_import
|
||||||
|
from __future__ import print_function
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
import subprocess
|
||||||
|
import sys
|
||||||
|
|
||||||
|
# Attempt to detect https://github.com/docker/compose/issues/4344
|
||||||
|
try:
|
||||||
|
# We don't try importing pip because it messes with package imports
|
||||||
|
# on some Linux distros (Ubuntu, Fedora)
|
||||||
|
# https://github.com/docker/compose/issues/4425
|
||||||
|
# https://github.com/docker/compose/issues/4481
|
||||||
|
# https://github.com/pypa/pip/blob/master/pip/_vendor/__init__.py
|
||||||
|
s_cmd = subprocess.Popen(
|
||||||
|
['pip', 'freeze'], stderr=subprocess.PIPE, stdout=subprocess.PIPE
|
||||||
|
)
|
||||||
|
packages = s_cmd.communicate()[0].splitlines()
|
||||||
|
dockerpy_installed = len(
|
||||||
|
list(filter(lambda p: p.startswith(b'docker-py=='), packages))
|
||||||
|
) > 0
|
||||||
|
if dockerpy_installed:
|
||||||
|
from .colors import red
|
||||||
|
print(
|
||||||
|
red('ERROR:'),
|
||||||
|
"Dependency conflict: an older version of the 'docker-py' package "
|
||||||
|
"is polluting the namespace. "
|
||||||
|
"Run the following command to remedy the issue:\n"
|
||||||
|
"pip uninstall docker docker-py; pip install docker",
|
||||||
|
file=sys.stderr
|
||||||
|
)
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
except OSError:
|
||||||
|
# pip command is not available, which indicates it's probably the binary
|
||||||
|
# distribution of Compose which is not affected
|
||||||
|
pass
|
|
@ -14,30 +14,6 @@ from distutils.spawn import find_executable
|
||||||
from inspect import getdoc
|
from inspect import getdoc
|
||||||
from operator import attrgetter
|
from operator import attrgetter
|
||||||
|
|
||||||
|
|
||||||
# Attempt to detect https://github.com/docker/compose/issues/4344
|
|
||||||
try:
|
|
||||||
# A regular import statement causes PyInstaller to freak out while
|
|
||||||
# trying to load pip. This way it is simply ignored.
|
|
||||||
pip = __import__('pip')
|
|
||||||
pip_packages = pip.get_installed_distributions()
|
|
||||||
if 'docker-py' in [pkg.project_name for pkg in pip_packages]:
|
|
||||||
from .colors import red
|
|
||||||
print(
|
|
||||||
red('ERROR:'),
|
|
||||||
"Dependency conflict: an older version of the 'docker-py' package "
|
|
||||||
"is polluting the namespace. "
|
|
||||||
"Run the following command to remedy the issue:\n"
|
|
||||||
"pip uninstall docker docker-py; pip install docker",
|
|
||||||
file=sys.stderr
|
|
||||||
)
|
|
||||||
sys.exit(1)
|
|
||||||
except ImportError:
|
|
||||||
# pip is not available, which indicates it's probably the binary
|
|
||||||
# distribution of Compose which is not affected
|
|
||||||
pass
|
|
||||||
|
|
||||||
|
|
||||||
from . import errors
|
from . import errors
|
||||||
from . import signals
|
from . import signals
|
||||||
from .. import __version__
|
from .. import __version__
|
||||||
|
|
Loading…
Reference in New Issue