All actions with the pip module (other than creating the venv) apply to the 
user context and not the venv on a Mac. The details below are for the pip 
module. Running the commands when logged into the system works as expected 
and using those commands with both the command and shell modules results in 
the same outcome as the pip module. There's something different about the 
way it's being interpreted through Ansible. The same role works fine in 
Linux. Have tried this on 2 different Macs, both running Catalina.

$ ansible --version
ansible [core 2.11.6] config file = None configured module search path = 
['/Users/spitzer/.ansible/plugins/modules', 
'/usr/share/ansible/plugins/modules'] ansible python module location = 
/Users/spitzer/.virtualenvs/ansible460/lib/python3.8/site-packages/ansible 
ansible collection location = 
/Users/spitzer/.ansible/collections:/usr/share/ansible/collections 
executable location = /Users/spitzer/.virtualenvs/ansible460/bin/ansible 
python version = 3.8.12 (default, Sep 1 2021, 07:26:09) [Clang 11.0.3 
(clang-1103.0.32.62)] jinja version = 3.0.1 libyaml = True

So, a minimal role to duplicate this is:

---

# Test pip role

- name: Create venvs root dir
  file: path: "{{ temp_dir }}/venvs"
  state: directory mode: "0755"

- name: pip install requests
  pip: name: requests
  state: latest
  virtualenv: "{{ temp_dir }}/venvs/test-env"

The pip install does create the venv where expected and all permissions 
look good, but during the install of 'requests' it gives me "Defaulting to 
user installation because normal site-packages is not writeable" and then 
installs it under user instead of the venv.

TASK [test_build : Create venvs dir] 
******************************************************************************************************************************************
ok: [devops-mac] => {"changed": false, "gid": 20, "group": "staff", "mode": 
"0755", "owner": "spitzer", "path": "/Users/spitzer/ansible_tmp/venvs", 
"size": 96, "state": "directory", "uid": 501}

TASK [test_build : pip install requests] 
*******************************************************************************************************************************
ok: [devops-mac] => {"changed": false, "cmd": 
["/Users/spitzer/ansible_tmp/venvs/test-env/bin/pip3", "install", "-U", 
"requests"], "name": ["requests"], "requirements": null, "state": "latest", 
"stderr": "  WARNING: The script normalizer is installed in 
'/Users/spitzer/Library/Python/3.8/bin' which is not on PATH.\n  Consider 
adding this directory to PATH or, if you prefer to suppress this warning, 
use --no-warn-script-location.\n", "stderr_lines": ["  WARNING: The script 
normalizer is installed in '/Users/spitzer/Library/Python/3.8/bin' which is 
not on PATH.", "  Consider adding this directory to PATH or, if you prefer 
to suppress this warning, use --no-warn-script-location."], "stdout": 
"created virtual environment CPython3.8.2.final.0-64 in 398ms\n  creator 
CPython3macOsFramework(dest=/Users/spitzer/ansible_tmp/venvs/test-env, 
clear=False, no_vcs_ignore=False, global=False)\n  seeder 
FromAppData(download=False, pip=bundle, setuptools=bundle, wheel=bundle, 
via=copy, app_data_dir=/Users/spitzer/Library/Application 
Support/virtualenv)\n    added seed packages: pip==21.3.1, 
setuptools==58.3.0, wheel==0.37.0\n  activators 
BashActivator,CShellActivator,FishActivator,NushellActivator,PowerShellActivator,PythonActivator\nDefaulting
 
to user installation because normal site-packages is not 
writeable\nRequirement already satisfied: requests in 
/Users/spitzer/Library/Python/3.8/lib/python/site-packages 
(2.26.0)\nCollecting idna<4,>=2.5\n  Using cached idna-3.3-py3-none-any.whl 
(61 kB)\nRequirement already satisfied: urllib3<1.27,>=1.21.1 in 
/Users/spitzer/Library/Python/3.8/lib/python/site-packages (from requests) 
(1.26.7)\nCollecting charset-normalizer~=2.0.0\n  Using cached 
charset_normalizer-2.0.7-py3-none-any.whl (38 kB)\nCollecting 
certifi>=2017.4.17\n  Using cached certifi-2021.10.8-py2.py3-none-any.whl 
(149 kB)\nInstalling collected packages: idna, charset-normalizer, 
certifi\nSuccessfully installed certifi-2021.10.8 charset-normalizer-2.0.7 
idna-3.3\n", "stdout_lines": ["created virtual environment 
CPython3.8.2.final.0-64 in 398ms", "  creator 
CPython3macOsFramework(dest=/Users/spitzer/ansible_tmp/venvs/test-env, 
clear=False, no_vcs_ignore=False, global=False)", "  seeder 
FromAppData(download=False, pip=bundle, setuptools=bundle, wheel=bundle, 
via=copy, app_data_dir=/Users/spitzer/Library/Application 
Support/virtualenv)", "    added seed packages: pip==21.3.1, 
setuptools==58.3.0, wheel==0.37.0", "  activators 
BashActivator,CShellActivator,FishActivator,NushellActivator,PowerShellActivator,PythonActivator",
 
"Defaulting to user installation because normal site-packages is not 
writeable", "Requirement already satisfied: requests in 
/Users/spitzer/Library/Python/3.8/lib/python/site-packages (2.26.0)", 
"Collecting idna<4,>=2.5", "  Using cached idna-3.3-py3-none-any.whl (61 
kB)", "Requirement already satisfied: urllib3<1.27,>=1.21.1 in 
/Users/spitzer/Library/Python/3.8/lib/python/site-packages (from requests) 
(1.26.7)", "Collecting charset-normalizer~=2.0.0", "  Using cached 
charset_normalizer-2.0.7-py3-none-any.whl (38 kB)", "Collecting 
certifi>=2017.4.17", "  Using cached certifi-2021.10.8-py2.py3-none-any.whl 
(149 kB)", "Installing collected packages: idna, charset-normalizer, 
certifi", "Successfully installed certifi-2021.10.8 
charset-normalizer-2.0.7 idna-3.3"], "version": null, "virtualenv": 
"/Users/spitzer/ansible_tmp/venvs/test-env"}

On the same machine, doing the following by hand works:
$ cd ~/ansible_tmp
$ virtualenv test-env
$ ~/ansible_tmp/test-env/bin/pip3 install requests

Running those exact commands using the shell module still results in the 
user install. Have also tried with pip module, explicitly setting the pip3 
binary with the same result.

Also, I completely removed the test-env directory before every test. Also, 
also, I've done this with the built-in Python 3.8 install, as well as the 
homebrew and macports 3.8 installs and forcing the correct python3 binary 
in the pip module. All had the same results.

Does anybody have any idea what I'm doing wrong here?

Thanks
-mS

-- 
You received this message because you are subscribed to the Google Groups 
"Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/ansible-project/dd5862ed-9ed4-44f5-9edb-650c0590fbd9n%40googlegroups.com.

Reply via email to