Always use python exec wrapper in ansible-test.
This commit is contained in:
parent
c986cbb996
commit
c7cb944315
2 changed files with 12 additions and 10 deletions
changelogs/fragments
test/lib/ansible_test/_internal
|
@ -0,0 +1,3 @@
|
|||
bugfixes:
|
||||
- ansible-test - Symbolic links are no longer used to inject ``python`` into the environment, since they do not work reliably in all cases.
|
||||
Instead, the existing Python based exec wrapper is always used.
|
|
@ -252,18 +252,17 @@ def get_python_path(args, interpreter):
|
|||
python_path = tempfile.mkdtemp(prefix=prefix, suffix=suffix, dir=root_temp_dir)
|
||||
injected_interpreter = os.path.join(python_path, 'python')
|
||||
|
||||
# A symlink is faster than the execv wrapper, but isn't compatible with virtual environments.
|
||||
# Attempt to detect when it is safe to use a symlink by checking the real path of the interpreter.
|
||||
use_symlink = os.path.dirname(os.path.realpath(interpreter)) == os.path.dirname(interpreter)
|
||||
# A symlink is faster than the execv wrapper, but isn't guaranteed to provide the correct result.
|
||||
# There are several scenarios known not to work with symlinks:
|
||||
#
|
||||
# - A virtual environment where the target is a symlink to another directory.
|
||||
# - A pyenv environment where the target is a shell script that changes behavior based on the program name.
|
||||
#
|
||||
# To avoid issues for these and other scenarios, only an exec wrapper is used.
|
||||
|
||||
if use_symlink:
|
||||
display.info('Injecting "%s" as a symlink to the "%s" interpreter.' % (injected_interpreter, interpreter), verbosity=1)
|
||||
display.info('Injecting "%s" as a execv wrapper for the "%s" interpreter.' % (injected_interpreter, interpreter), verbosity=1)
|
||||
|
||||
os.symlink(interpreter, injected_interpreter)
|
||||
else:
|
||||
display.info('Injecting "%s" as a execv wrapper for the "%s" interpreter.' % (injected_interpreter, interpreter), verbosity=1)
|
||||
|
||||
create_interpreter_wrapper(interpreter, injected_interpreter)
|
||||
create_interpreter_wrapper(interpreter, injected_interpreter)
|
||||
|
||||
os.chmod(python_path, MODE_DIRECTORY)
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue