Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

M1 Mac codesigning issue: execv() arg 2 must contain only strings #2282

Closed
peret opened this issue Jan 6, 2022 · 6 comments · Fixed by #2288
Closed

M1 Mac codesigning issue: execv() arg 2 must contain only strings #2282

peret opened this issue Jan 6, 2022 · 6 comments · Fixed by #2288
Labels

Comments

@peret
Copy link

peret commented Jan 6, 2022

Issue

I've seen that there has been a lot of work put in already to make virtualenv run under arm64 + MacOS 12, so thanks for that :) Unfortunately, I'm still running into an issue when trying to create a Python 2 virtualenv on my M1 MacBook. The error is an "TypeError: execv() arg 2 must contain only strings" and seems to happen when trying to copy the python executable for codesigning. I hope someone here can help me resolve that. I might also be able to help out with a PR, but would appreciate any guidance you can already give 😁

Environment

  • OS: 12.0.1 (M1 MacBook)
  • I'm using MacOS' system Python
  • pip list of the host python where virtualenv is installed:
Package                                Version
-------------------------------------- -----------
altgraph                               0.10.2
asn1crypto                             0.24.0
bdist-mpkg                             0.5.0
bonjour-py                             0.3
cffi                                   1.14.3
configparser                           4.0.2
contextlib2                            0.6.0.post1
cryptography                           2.9.2
distlib                                0.3.4
enum34                                 1.1.6
filelock                               3.2.1
future                                 0.17.1
importlib-metadata                     2.1.2
importlib-resources                    3.3.1
ipaddress                              1.0.22
macholib                               1.5.1
matplotlib                             1.3.1
modulegraph                            0.10.4
numpy                                  1.8.0rc1
pathlib2                               2.3.6
pip                                    20.3.4
platformdirs                           2.0.2
py2app                                 0.7.3
pycparser                              2.19
pyobjc-core                            2.5.1
pyobjc-framework-Accounts              2.5.1
pyobjc-framework-AddressBook           2.5.1
pyobjc-framework-AppleScriptKit        2.5.1
pyobjc-framework-AppleScriptObjC       2.5.1
pyobjc-framework-Automator             2.5.1
pyobjc-framework-CFNetwork             2.5.1
pyobjc-framework-Cocoa                 2.5.1
pyobjc-framework-Collaboration         2.5.1
pyobjc-framework-CoreData              2.5.1
pyobjc-framework-CoreLocation          2.5.1
pyobjc-framework-CoreText              2.5.1
pyobjc-framework-DictionaryServices    2.5.1
pyobjc-framework-EventKit              2.5.1
pyobjc-framework-ExceptionHandling     2.5.1
pyobjc-framework-FSEvents              2.5.1
pyobjc-framework-InputMethodKit        2.5.1
pyobjc-framework-InstallerPlugins      2.5.1
pyobjc-framework-InstantMessage        2.5.1
pyobjc-framework-LatentSemanticMapping 2.5.1
pyobjc-framework-LaunchServices        2.5.1
pyobjc-framework-Message               2.5.1
pyobjc-framework-OpenDirectory         2.5.1
pyobjc-framework-PreferencePanes       2.5.1
pyobjc-framework-PubSub                2.5.1
pyobjc-framework-QTKit                 2.5.1
pyobjc-framework-Quartz                2.5.1
pyobjc-framework-ScreenSaver           2.5.1
pyobjc-framework-ScriptingBridge       2.5.1
pyobjc-framework-SearchKit             2.5.1
pyobjc-framework-ServiceManagement     2.5.1
pyobjc-framework-Social                2.5.1
pyobjc-framework-SyncServices          2.5.1
pyobjc-framework-SystemConfiguration   2.5.1
pyobjc-framework-WebKit                2.5.1
pyOpenSSL                              19.0.0
pyparsing                              2.0.1
python-dateutil                        1.5
pytz                                   2013.7
scandir                                1.10.0
scipy                                  0.13.0b1
setuptools                             41.0.1
singledispatch                         3.7.0
six                                    1.12.0
typing                                 3.10.0.0
virtualenv                             20.13.0
wheel                                  0.33.1
xattr                                  0.6.4
zipp                                   1.2.0

Output of the virtual environment creation

53 setup logging to NOTSET [DEBUG report:39]
65 find interpreter for spec PythonSpec(path=/System/Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python) [INFO builtin:62]
65 proposed PythonInfo({'base_exec_prefix': None, 'system_stdlib': u'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7', 'has_venv': False, 'prefix': u'/System/Library/Frameworks/Python.framework/Versions/2.7', 'stdout_encoding': u'UTF-8', 'executable': '/System/Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python', 'implementation': u'CPython', 'exec_prefix': u'/System/Library/Frameworks/Python.framework/Versions/2.7', 'platform': u'darwin', 'version': u'2.7.18 (default, Oct  2 2021, 04:20:38) \n[GCC Apple LLVM 13.0.0 (clang-1300.0.29.1) [+internal-os, ptrauth-isa=deploymen', 'sysconfig_paths': {u'platstdlib': u'{platbase}/lib/python{py_version_short}', u'platlib': u'{platbase}/lib/python{py_version_short}/site-packages', u'purelib': u'{base}/lib/python{py_version_short}/site-packages', u'stdlib': u'{base}/lib/python{py_version_short}', u'scripts': u'{base}/bin', u'include': u'{base}/include/python{py_version_short}', u'data': u'{base}'}, 'sysconfig_scheme': None, 'base_prefix': None, 'system_stdlib_platform': u'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7', 'file_system_encoding': u'utf-8', 'version_info': VersionInfo(major=2, minor=7, micro=18, releaselevel=u'final', serial=0), 'sysconfig_vars': {u'base': u'/System/Library/Frameworks/Python.framework/Versions/2.7', u'platbase': u'/System/Library/Frameworks/Python.framework/Versions/2.7', u'PYTHONFRAMEWORK': u'Python', u'py_version_short': u'2.7'}, 'path': [u'/usr/local/bin', u'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python27.zip', u'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7', u'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin', u'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac', u'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages', u'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk', u'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-old', u'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload', u'/Users/peter/Library/Python/2.7/lib/python/site-packages', u'/Library/Python/2.7/site-packages', u'/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python', u'/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/PyObjC', u'/Library/Python/2.7/site-packages/virtualenv-20.13.0-py2.7.egg'], 'max_size': 9223372036854775807, 'sysconfig': {u'makefile_filename': u'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/config/Makefile'}, 'real_prefix': None, 'distutils_install': {u'purelib': u'lib/python2.7/site-packages', u'headers': u'include/python2.7/UNKNOWN', u'platlib': u'lib/python2.7/site-packages', u'data': u'', u'scripts': u'bin'}, 'architecture': 64, 'original_executable': u'/System/Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python', 'os': u'posix', 'system_executable': u'/System/Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python'}) [INFO builtin:69]
65 accepted PythonInfo({'base_exec_prefix': None, 'system_stdlib': u'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7', 'has_venv': False, 'prefix': u'/System/Library/Frameworks/Python.framework/Versions/2.7', 'stdout_encoding': u'UTF-8', 'executable': '/System/Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python', 'implementation': u'CPython', 'exec_prefix': u'/System/Library/Frameworks/Python.framework/Versions/2.7', 'platform': u'darwin', 'version': u'2.7.18 (default, Oct  2 2021, 04:20:38) \n[GCC Apple LLVM 13.0.0 (clang-1300.0.29.1) [+internal-os, ptrauth-isa=deploymen', 'sysconfig_paths': {u'platstdlib': u'{platbase}/lib/python{py_version_short}', u'platlib': u'{platbase}/lib/python{py_version_short}/site-packages', u'purelib': u'{base}/lib/python{py_version_short}/site-packages', u'stdlib': u'{base}/lib/python{py_version_short}', u'scripts': u'{base}/bin', u'include': u'{base}/include/python{py_version_short}', u'data': u'{base}'}, 'sysconfig_scheme': None, 'base_prefix': None, 'system_stdlib_platform': u'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7', 'file_system_encoding': u'utf-8', 'version_info': VersionInfo(major=2, minor=7, micro=18, releaselevel=u'final', serial=0), 'sysconfig_vars': {u'base': u'/System/Library/Frameworks/Python.framework/Versions/2.7', u'platbase': u'/System/Library/Frameworks/Python.framework/Versions/2.7', u'PYTHONFRAMEWORK': u'Python', u'py_version_short': u'2.7'}, 'path': [u'/usr/local/bin', u'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python27.zip', u'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7', u'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin', u'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac', u'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages', u'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk', u'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-old', u'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload', u'/Users/peter/Library/Python/2.7/lib/python/site-packages', u'/Library/Python/2.7/site-packages', u'/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python', u'/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/PyObjC', u'/Library/Python/2.7/site-packages/virtualenv-20.13.0-py2.7.egg'], 'max_size': 9223372036854775807, 'sysconfig': {u'makefile_filename': u'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/config/Makefile'}, 'real_prefix': None, 'distutils_install': {u'purelib': u'lib/python2.7/site-packages', u'headers': u'include/python2.7/UNKNOWN', u'platlib': u'lib/python2.7/site-packages', u'data': u'', u'scripts': u'bin'}, 'architecture': 64, 'original_executable': u'/System/Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python', 'os': u'posix', 'system_executable': u'/System/Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python'}) [DEBUG builtin:71]
70 filesystem is not case-sensitive [DEBUG info:29]
108 create virtual environment via CPython2macOsArmFramework(dest=/Users/peter/path/venv, clear=False, no_vcs_ignore=False, global=False) [INFO session:52]
108 write /Users/peter/path/venv/pyvenv.cfg [DEBUG pyenv_cfg:34]
108 	home = /System/Library/Frameworks/Python.framework/Versions/2.7 [DEBUG pyenv_cfg:38]
108 	implementation = CPython [DEBUG pyenv_cfg:38]
108 	version_info = 2.7.18.final.0 [DEBUG pyenv_cfg:38]
108 	virtualenv = 20.13.0 [DEBUG pyenv_cfg:38]
108 	include-system-site-packages = false [DEBUG pyenv_cfg:38]
108 	base-prefix = /System/Library/Frameworks/Python.framework/Versions/2.7 [DEBUG pyenv_cfg:38]
108 	base-exec-prefix = /System/Library/Frameworks/Python.framework/Versions/2.7 [DEBUG pyenv_cfg:38]
108 	base-executable = /System/Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python [DEBUG pyenv_cfg:38]
108 remove file /Users/peter/path/venv/bin/python [DEBUG _sync:37]
108 copy /System/Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python to /Users/peter/path/venv/bin/python [DEBUG _sync:51]
109 remove file /Users/peter/path/venv/lib/python2.7/os.py [DEBUG _sync:37]
109 symlink /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/os.py to /Users/peter/path/venv/lib/python2.7/os.py [DEBUG _sync:43]
109 remove file /Users/peter/path/venv/lib/python2.7/os.pyc [DEBUG _sync:37]
109 symlink /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/os.pyc to /Users/peter/path/venv/lib/python2.7/os.pyc [DEBUG _sync:43]
109 remove file /Users/peter/path/venv/include/python2.7 [DEBUG _sync:37]
110 symlink directory /System/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7 to /Users/peter/path/venv/include/python2.7 [DEBUG _sync:43]
110 remove file /Users/peter/path/venv/lib/python2.7/config/Makefile [DEBUG _sync:37]
110 symlink /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/config/Makefile to /Users/peter/path/venv/lib/python2.7/config/Makefile [DEBUG _sync:43]
110 remove file /Users/peter/path/venv/.Python [DEBUG _sync:37]
110 symlink /System/Library/Frameworks/Python.framework/Versions/2.7/Python to /Users/peter/path/venv/.Python [DEBUG _sync:43]
110 remove file /Users/peter/path/venv/lib/python2.7/lib-dynload [DEBUG _sync:37]
110 symlink directory /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload to /Users/peter/path/venv/lib/python2.7/lib-dynload [DEBUG _sync:43]
110 create virtualenv import hook file /Users/peter/path/venv/lib/python2.7/site-packages/_virtualenv.pth [DEBUG api:95]
110 create /Users/peter/path/venv/lib/python2.7/site-packages/_virtualenv.py [DEBUG api:98]
111 change Mach-O for /Users/peter/path/venv/bin/python from /System/Library/Frameworks/Python.framework/Versions/2.7/Python to @executable_path/../.Python [DEBUG mac_os:201]
111 Changing signature of copied python exe /Users/peter/path/venv/bin/python [DEBUG mac_os:132]
115 Could not change MacOS code signing on copied python exe at /Users/peter/path/venv/bin/python [CRITICAL mac_os:144]
Traceback (most recent call last):
  File "/usr/local/bin/virtualenv", line 11, in <module>
    load_entry_point('virtualenv==20.13.0', 'console_scripts', 'virtualenv')()
  File "/Library/Python/2.7/site-packages/virtualenv-20.13.0-py2.7.egg/virtualenv/__main__.py", line 65, in run_with_catch
    run(args, options, env)
  File "/Library/Python/2.7/site-packages/virtualenv-20.13.0-py2.7.egg/virtualenv/__main__.py", line 18, in run
    session = cli_run(args, options, env)
  File "/Library/Python/2.7/site-packages/virtualenv-20.13.0-py2.7.egg/virtualenv/run/__init__.py", line 32, in cli_run
    of_session.run()
  File "/Library/Python/2.7/site-packages/virtualenv-20.13.0-py2.7.egg/virtualenv/run/session.py", line 46, in run
    self._create()
  File "/Library/Python/2.7/site-packages/virtualenv-20.13.0-py2.7.egg/virtualenv/run/session.py", line 53, in _create
    self.creator.run()
  File "/Library/Python/2.7/site-packages/virtualenv-20.13.0-py2.7.egg/virtualenv/create/creator.py", line 171, in run
    self.create()
  File "/Library/Python/2.7/site-packages/virtualenv-20.13.0-py2.7.egg/virtualenv/create/via_global_ref/builtin/cpython/mac_os.py", line 122, in create
    self.fix_signature()
  File "/Library/Python/2.7/site-packages/virtualenv-20.13.0-py2.7.egg/virtualenv/create/via_global_ref/builtin/cpython/mac_os.py", line 137, in fix_signature
    subprocess.check_call(["cp", exe, bak_dir])
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 185, in check_call
    retcode = call(*popenargs, **kwargs)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 172, in call
    return Popen(*popenargs, **kwargs).wait()
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 394, in __init__
    errread, errwrite)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 1047, in _execute_child
    raise child_exception
TypeError: execv() arg 2 must contain only strings
@peret peret added the bug label Jan 6, 2022
@rcoltea
Copy link

rcoltea commented Jan 11, 2022

Did you find a solution for this issue?

@rcoltea
Copy link

rcoltea commented Jan 12, 2022

• Install PYTHON2.7
Download this pkg
https://www.python.org/ftp/python/2.7.18/python-2.7.18-macosx10.9.pkg
Python is installing pythonw check the symlink, for me it was installed here: /Library/Frameworks/Python.framework/Versions/2.7/bin/pythonw

Get PIP : curl -O https://bootstrap.pypa.io/pip/2.7/get-pip.py
Install PIP python get-pip.py
Install virtualenv: pip install virtualenv

Create virtualenv with the new python:
virtualenv -p /Library/Frameworks/Python.framework/Versions/2.7/bin/pythonw testenv

@descript-tom
Copy link

@peret I have the same issue on

  • macOS 12.1
  • M1 Max
  • System Python 2.7
Package                                Version
-------------------------------------- -----------
altgraph                               0.10.2
asn1crypto                             0.24.0
bdist-mpkg                             0.5.0
bonjour-py                             0.3
cffi                                   1.14.3
configparser                           4.0.2
contextlib2                            0.6.0.post1
cryptography                           3.3.2
distlib                                0.3.4
enum34                                 1.1.6
filelock                               3.2.1
future                                 0.17.1
importlib-metadata                     2.1.3
importlib-resources                    3.3.1
ipaddress                              1.0.22
macholib                               1.5.1
matplotlib                             1.3.1
modulegraph                            0.10.4
numpy                                  1.8.0rc1
pathlib2                               2.3.6
pip                                    20.3.4
platformdirs                           2.0.2
py2app                                 0.7.3
pycparser                              2.19
pyobjc-core                            2.5.1
pyobjc-framework-Accounts              2.5.1
pyobjc-framework-AddressBook           2.5.1
pyobjc-framework-AppleScriptKit        2.5.1
pyobjc-framework-AppleScriptObjC       2.5.1
pyobjc-framework-Automator             2.5.1
pyobjc-framework-CFNetwork             2.5.1
pyobjc-framework-Cocoa                 2.5.1
pyobjc-framework-Collaboration         2.5.1
pyobjc-framework-CoreData              2.5.1
pyobjc-framework-CoreLocation          2.5.1
pyobjc-framework-CoreText              2.5.1
pyobjc-framework-DictionaryServices    2.5.1
pyobjc-framework-EventKit              2.5.1
pyobjc-framework-ExceptionHandling     2.5.1
pyobjc-framework-FSEvents              2.5.1
pyobjc-framework-InputMethodKit        2.5.1
pyobjc-framework-InstallerPlugins      2.5.1
pyobjc-framework-InstantMessage        2.5.1
pyobjc-framework-LatentSemanticMapping 2.5.1
pyobjc-framework-LaunchServices        2.5.1
pyobjc-framework-Message               2.5.1
pyobjc-framework-OpenDirectory         2.5.1
pyobjc-framework-PreferencePanes       2.5.1
pyobjc-framework-PubSub                2.5.1
pyobjc-framework-QTKit                 2.5.1
pyobjc-framework-Quartz                2.5.1
pyobjc-framework-ScreenSaver           2.5.1
pyobjc-framework-ScriptingBridge       2.5.1
pyobjc-framework-SearchKit             2.5.1
pyobjc-framework-ServiceManagement     2.5.1
pyobjc-framework-Social                2.5.1
pyobjc-framework-SyncServices          2.5.1
pyobjc-framework-SystemConfiguration   2.5.1
pyobjc-framework-WebKit                2.5.1
pyOpenSSL                              20.0.1
pyparsing                              2.0.1
python-dateutil                        1.5
pytz                                   2013.7
scandir                                1.10.0
scipy                                  0.13.0b1
setuptools                             41.0.1
singledispatch                         3.7.0
six                                    1.12.0
typing                                 3.10.0.0
virtualenv                             20.13.0
wheel                                  0.33.1
xattr                                  0.6.4
zipp                                   1.2.0

Executing python -m virtualenv myvenv

leads to the error

Could not change MacOS code signing on copied python exe at /Users/USER/virtualenvs/myvenv/bin/python
TypeError: execv() arg 2 must contain only strings

@rcoltea
Copy link

rcoltea commented Feb 1, 2022

There is a problem with the python version you have installed. How did you install it? Did you use brew?

@descript-tom
Copy link

Brew does not support Python 2.7 any longer. I use the system default Python 2.7

@peret
Copy link
Author

peret commented Feb 1, 2022 via email

bors bot added a commit to ChrisRBe/PP-P2P-Parser that referenced this issue Feb 7, 2022
499: build(deps): bump virtualenv from 20.13.0 to 20.13.1 r=ChrisRBe a=dependabot[bot]

Bumps [virtualenv](https://github.com/pypa/virtualenv) from 20.13.0 to 20.13.1.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a href="https://github.com/pypa/virtualenv/blob/main/docs/changelog.rst">virtualenv's changelog</a>.</em></p>
<blockquote>
<h2>v20.13.1 (2022-02-05)</h2>
<p>Bugfixes - 20.13.1</p>
<pre><code>- fix &quot;execv() arg 2 must contain only strings&quot; error on M1 MacOS (`[#2282](pypa/virtualenv#2282) &lt;https://github.com/pypa/virtualenv/issues/2282&gt;`_)
- Ugrade embedded setuptools to ``60.5.0`` from ``60.2.0`` - by :user:`asottile`. (`[#2289](pypa/virtualenv#2289) &lt;https://github.com/pypa/virtualenv/issues/2289&gt;`_)
- Upgrade embedded pip to ``22.0.3`` and setuptools to ``60.6.0`` - by :user:`gaborbernat` and :user:`asottile`. (`[#2294](pypa/virtualenv#2294) &lt;https://github.com/pypa/virtualenv/issues/2294&gt;`_)
</code></pre>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a href="https://github.com/pypa/virtualenv/commit/16ad07fdcc7fe1d5f9a40ff5cf9cec005ff2cb1c"><code>16ad07f</code></a> release 20.13.1</li>
<li><a href="https://github.com/pypa/virtualenv/commit/5ee5ad9a1941aaf0a64062208eabccf85e9f9004"><code>5ee5ad9</code></a> fix setuptools zipimport breakage by downgrading setuptools (<a href="https://github-redirect.dependabot.com/pypa/virtualenv/issues/2296">#2296</a>)</li>
<li><a href="https://github.com/pypa/virtualenv/commit/92166a9e90b5949b84d85273dac682c54db134c1"><code>92166a9</code></a> Bump pip and setuptools (<a href="https://github-redirect.dependabot.com/pypa/virtualenv/issues/2294">#2294</a>)</li>
<li><a href="https://github.com/pypa/virtualenv/commit/f969a91240e29eace6b7ddcc390bb1553027a483"><code>f969a91</code></a> fix: cast type from Path to text (<a href="https://github-redirect.dependabot.com/pypa/virtualenv/issues/2288">#2288</a>)</li>
<li><a href="https://github.com/pypa/virtualenv/commit/5dde2d8b3caf1ae9391e54c6b83a97c1340d4ca3"><code>5dde2d8</code></a> Do not fail on warning and move to 3.10</li>
<li><a href="https://github.com/pypa/virtualenv/commit/2f5453641b1cc7482c27fb26c6cc94ad70ec32f5"><code>2f54536</code></a> [pre-commit.ci] pre-commit autoupdate (<a href="https://github-redirect.dependabot.com/pypa/virtualenv/issues/2293">#2293</a>)</li>
<li><a href="https://github.com/pypa/virtualenv/commit/bb2eeaca5a5c9818bf3b8b047f0e859c16905d26"><code>bb2eeac</code></a> upgrade embedded wheels (<a href="https://github-redirect.dependabot.com/pypa/virtualenv/issues/2289">#2289</a>)</li>
<li><a href="https://github.com/pypa/virtualenv/commit/52db980b99d9a908b79f0ff4ab1e2214bb257b1d"><code>52db980</code></a> Fix typos (<a href="https://github-redirect.dependabot.com/pypa/virtualenv/issues/2286">#2286</a>)</li>
<li><a href="https://github.com/pypa/virtualenv/commit/7dfd1df00eb1916bf60d23157dc30502614d041a"><code>7dfd1df</code></a> [pre-commit.ci] pre-commit autoupdate (<a href="https://github-redirect.dependabot.com/pypa/virtualenv/issues/2278">#2278</a>)</li>
<li><a href="https://github.com/pypa/virtualenv/commit/94603ae20a8d814e60d31ab4a948a0ac866b6273"><code>94603ae</code></a> Fix changelog</li>
<li>Additional commits viewable in <a href="https://github.com/pypa/virtualenv/compare/20.13.0...20.13.1">compare view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=virtualenv&package-manager=pip&previous-version=20.13.0&new-version=20.13.1)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting ``@dependabot` rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- ``@dependabot` rebase` will rebase this PR
- ``@dependabot` recreate` will recreate this PR, overwriting any edits that have been made to it
- ``@dependabot` merge` will merge this PR after your CI passes on it
- ``@dependabot` squash and merge` will squash and merge this PR after your CI passes on it
- ``@dependabot` cancel merge` will cancel a previously requested merge and block automerging
- ``@dependabot` reopen` will reopen this PR if it is closed
- ``@dependabot` close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
- ``@dependabot` ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
- ``@dependabot` ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
- ``@dependabot` ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)


</details>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
renefritze added a commit to WWU-AMM/rdf_linkchecker that referenced this issue Feb 8, 2022
[//]: # (dependabot-start)
⚠️  **Dependabot is rebasing this PR** ⚠️ 

Rebasing might not happen immediately, so don't worry if this takes some time.

Note: if you make any changes to this PR yourself, they will take precedence over the rebase.

---

[//]: # (dependabot-end)

Bumps [virtualenv](https://github.com/pypa/virtualenv) from 20.13.0 to 20.13.1.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a href="https://github.com/pypa/virtualenv/blob/main/docs/changelog.rst">virtualenv's changelog</a>.</em></p>
<blockquote>
<h2>v20.13.1 (2022-02-05)</h2>
<p>Bugfixes - 20.13.1</p>
<pre><code>- fix &quot;execv() arg 2 must contain only strings&quot; error on M1 MacOS (`[#2282](pypa/virtualenv#2282) &lt;https://github.com/pypa/virtualenv/issues/2282&gt;`_)
- Ugrade embedded setuptools to ``60.5.0`` from ``60.2.0`` - by :user:`asottile`. (`[#2289](pypa/virtualenv#2289) &lt;https://github.com/pypa/virtualenv/issues/2289&gt;`_)
- Upgrade embedded pip to ``22.0.3`` and setuptools to ``60.6.0`` - by :user:`gaborbernat` and :user:`asottile`. (`[#2294](pypa/virtualenv#2294) &lt;https://github.com/pypa/virtualenv/issues/2294&gt;`_)
</code></pre>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a href="https://github.com/pypa/virtualenv/commit/16ad07fdcc7fe1d5f9a40ff5cf9cec005ff2cb1c"><code>16ad07f</code></a> release 20.13.1</li>
<li><a href="https://github.com/pypa/virtualenv/commit/5ee5ad9a1941aaf0a64062208eabccf85e9f9004"><code>5ee5ad9</code></a> fix setuptools zipimport breakage by downgrading setuptools (<a href="https://github-redirect.dependabot.com/pypa/virtualenv/issues/2296">#2296</a>)</li>
<li><a href="https://github.com/pypa/virtualenv/commit/92166a9e90b5949b84d85273dac682c54db134c1"><code>92166a9</code></a> Bump pip and setuptools (<a href="https://github-redirect.dependabot.com/pypa/virtualenv/issues/2294">#2294</a>)</li>
<li><a href="https://github.com/pypa/virtualenv/commit/f969a91240e29eace6b7ddcc390bb1553027a483"><code>f969a91</code></a> fix: cast type from Path to text (<a href="https://github-redirect.dependabot.com/pypa/virtualenv/issues/2288">#2288</a>)</li>
<li><a href="https://github.com/pypa/virtualenv/commit/5dde2d8b3caf1ae9391e54c6b83a97c1340d4ca3"><code>5dde2d8</code></a> Do not fail on warning and move to 3.10</li>
<li><a href="https://github.com/pypa/virtualenv/commit/2f5453641b1cc7482c27fb26c6cc94ad70ec32f5"><code>2f54536</code></a> [pre-commit.ci] pre-commit autoupdate (<a href="https://github-redirect.dependabot.com/pypa/virtualenv/issues/2293">#2293</a>)</li>
<li><a href="https://github.com/pypa/virtualenv/commit/bb2eeaca5a5c9818bf3b8b047f0e859c16905d26"><code>bb2eeac</code></a> upgrade embedded wheels (<a href="https://github-redirect.dependabot.com/pypa/virtualenv/issues/2289">#2289</a>)</li>
<li><a href="https://github.com/pypa/virtualenv/commit/52db980b99d9a908b79f0ff4ab1e2214bb257b1d"><code>52db980</code></a> Fix typos (<a href="https://github-redirect.dependabot.com/pypa/virtualenv/issues/2286">#2286</a>)</li>
<li><a href="https://github.com/pypa/virtualenv/commit/7dfd1df00eb1916bf60d23157dc30502614d041a"><code>7dfd1df</code></a> [pre-commit.ci] pre-commit autoupdate (<a href="https://github-redirect.dependabot.com/pypa/virtualenv/issues/2278">#2278</a>)</li>
<li><a href="https://github.com/pypa/virtualenv/commit/94603ae20a8d814e60d31ab4a948a0ac866b6273"><code>94603ae</code></a> Fix changelog</li>
<li>Additional commits viewable in <a href="https://github.com/pypa/virtualenv/compare/20.13.0...20.13.1">compare view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=virtualenv&package-manager=pip&previous-version=20.13.0&new-version=20.13.1)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)


</details>
mergify bot pushed a commit to andrewbolster/bolster that referenced this issue Mar 8, 2022
Bumps [virtualenv](https://github.com/pypa/virtualenv) from 20.13.0 to 20.13.3.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a href="https://github.com/pypa/virtualenv/blob/main/docs/changelog.rst">virtualenv's changelog</a>.</em></p>
<blockquote>
<h2>v20.13.3 (2022-03-07)</h2>
<p>Bugfixes - 20.13.3</p>
<pre><code>- Avoid symlinking the contents of ``/usr`` into PyPy3.8+ virtualenvs - by :user:`stefanor`. (`[#2310](pypa/virtualenv#2310) &lt;https://github.com/pypa/virtualenv/issues/2310&gt;`_)
- Bump embed pip from ``22.0.3`` to ``22.0.4`` - by :user:`gaborbernat`. (`[#2311](pypa/virtualenv#2311) &lt;https://github.com/pypa/virtualenv/issues/2311&gt;`_)
<h2>v20.13.2 (2022-02-24)</h2>
<p>Bugfixes - 20.13.2
</code></pre></p>
<ul>
<li>Upgrade embedded setuptools to <code>60.9.3</code> from <code>60.6.0</code> - by :user:<code>gaborbernat</code>. (<code>[#2306](pypa/virtualenv#2306) &lt;https://github.com/pypa/virtualenv/issues/2306&gt;</code>_)</li>
</ul>
<h2>v20.13.1 (2022-02-05)</h2>
<p>Bugfixes - 20.13.1</p>
<pre><code>- fix &quot;execv() arg 2 must contain only strings&quot; error on M1 MacOS (`[#2282](pypa/virtualenv#2282) &lt;https://github.com/pypa/virtualenv/issues/2282&gt;`_)
- Ugrade embedded setuptools to ``60.5.0`` from ``60.2.0`` - by :user:`asottile`. (`[#2289](pypa/virtualenv#2289) &lt;https://github.com/pypa/virtualenv/issues/2289&gt;`_)
- Upgrade embedded pip to ``22.0.3`` and setuptools to ``60.6.0`` - by :user:`gaborbernat` and :user:`asottile`. (`[#2294](pypa/virtualenv#2294) &lt;https://github.com/pypa/virtualenv/issues/2294&gt;`_)
</code></pre>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a href="https://github.com/pypa/virtualenv/commit/e3c30b7e6a9d6743e2374cba8885c599801be767"><code>e3c30b7</code></a> release 20.13.3</li>
<li><a href="https://github.com/pypa/virtualenv/commit/471e7cc5e180909481caf9c901dd8451eb8a49fe"><code>471e7cc</code></a> Upgrade pip to 22.0.4 (<a href="https://github-redirect.dependabot.com/pypa/virtualenv/issues/2311">#2311</a>)</li>
<li><a href="https://github.com/pypa/virtualenv/commit/3a90a6bb48313ad45bfc448637b91c630b5014ac"><code>3a90a6b</code></a> Avoid symlinking the contents of /usr into PyPy3 virtualenvs (<a href="https://github-redirect.dependabot.com/pypa/virtualenv/issues/2310">#2310</a>)</li>
<li><a href="https://github.com/pypa/virtualenv/commit/bb3131a36917a8100afa624b1da7e4971e23030e"><code>bb3131a</code></a> Merge pull request <a href="https://github-redirect.dependabot.com/pypa/virtualenv/issues/2307">#2307</a> from pypa/release-20.13.2</li>
<li><a href="https://github.com/pypa/virtualenv/commit/bcf9bb892d020ba8993bd06ce8a6c43796ae97e0"><code>bcf9bb8</code></a> release 20.13.2</li>
<li><a href="https://github.com/pypa/virtualenv/commit/6378f7240130810e498e26f893a780096a743fa0"><code>6378f72</code></a> Bump setuptools (<a href="https://github-redirect.dependabot.com/pypa/virtualenv/issues/2306">#2306</a>)</li>
<li><a href="https://github.com/pypa/virtualenv/commit/7424a015d1c28e26fd9324b8c47dab6d6c15b184"><code>7424a01</code></a> use the workflow as part of the concurrency group (<a href="https://github-redirect.dependabot.com/pypa/virtualenv/issues/2300">#2300</a>)</li>
<li><a href="https://github.com/pypa/virtualenv/commit/253bee65b26e8adde4934f8c9ffe484efe965db7"><code>253bee6</code></a> Merge pull request <a href="https://github-redirect.dependabot.com/pypa/virtualenv/issues/2299">#2299</a> from pypa/release-20.13.1</li>
<li><a href="https://github.com/pypa/virtualenv/commit/16ad07fdcc7fe1d5f9a40ff5cf9cec005ff2cb1c"><code>16ad07f</code></a> release 20.13.1</li>
<li><a href="https://github.com/pypa/virtualenv/commit/5ee5ad9a1941aaf0a64062208eabccf85e9f9004"><code>5ee5ad9</code></a> fix setuptools zipimport breakage by downgrading setuptools (<a href="https://github-redirect.dependabot.com/pypa/virtualenv/issues/2296">#2296</a>)</li>
<li>Additional commits viewable in <a href="https://github.com/pypa/virtualenv/compare/20.13.0...20.13.3">compare view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=virtualenv&package-manager=pip&previous-version=20.13.0&new-version=20.13.3)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)


</details>
mergify bot pushed a commit to andrewbolster/bolster that referenced this issue Mar 25, 2022
Bumps [virtualenv](https://github.com/pypa/virtualenv) from 20.13.4 to 20.14.0.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a href="https://github.com/pypa/virtualenv/blob/20.14.0/docs/changelog.rst">virtualenv's changelog</a>.</em></p>
<blockquote>
<h2>v20.14.0 (2022-03-25)</h2>
<p>Features - 20.14.0</p>
<pre><code>- Support Nushell activation scripts with nu version ``0.60`` - by :user:`kubouch`. (`[#2321](pypa/virtualenv#2321) &lt;https://github.com/pypa/virtualenv/issues/2321&gt;`_)
<p>Bugfixes - 20.14.0
</code></pre></p>
<ul>
<li>Improve performance of python startup inside created virtualenvs - by :user:<code>asottile</code>. (<code>[#2317](pypa/virtualenv#2317) &lt;https://github.com/pypa/virtualenv/issues/2317&gt;</code>_)</li>
<li>Upgrade embedded setuptools to <code>60.10.0</code> from <code>60.9.3</code> - by :user:<code>gaborbernat</code>. (<code>[#2320](pypa/virtualenv#2320) &lt;https://github.com/pypa/virtualenv/issues/2320&gt;</code>_)</li>
<li>Upgrade embedded setuptools to <code>61.0.0</code> from <code>60.10.0</code> - by :user:<code>gaborbernat</code>. (<code>[#2322](pypa/virtualenv#2322) &lt;https://github.com/pypa/virtualenv/issues/2322&gt;</code>_)</li>
</ul>
<h2>v20.13.3 (2022-03-07)</h2>
<p>Bugfixes - 20.13.3</p>
<pre><code>- Avoid symlinking the contents of ``/usr`` into PyPy3.8+ virtualenvs - by :user:`stefanor`. (`[#2310](pypa/virtualenv#2310) &lt;https://github.com/pypa/virtualenv/issues/2310&gt;`_)
- Bump embed pip from ``22.0.3`` to ``22.0.4`` - by :user:`gaborbernat`. (`[#2311](pypa/virtualenv#2311) &lt;https://github.com/pypa/virtualenv/issues/2311&gt;`_)
<h2>v20.13.2 (2022-02-24)</h2>
<p>Bugfixes - 20.13.2
</code></pre></p>
<ul>
<li>Upgrade embedded setuptools to <code>60.9.3</code> from <code>60.6.0</code> - by :user:<code>gaborbernat</code>. (<code>[#2306](pypa/virtualenv#2306) &lt;https://github.com/pypa/virtualenv/issues/2306&gt;</code>_)</li>
</ul>
<h2>v20.13.1 (2022-02-05)</h2>
<p>Bugfixes - 20.13.1</p>
<pre><code>- fix &quot;execv() arg 2 must contain only strings&quot; error on M1 MacOS (`[#2282](pypa/virtualenv#2282) &lt;https://github.com/pypa/virtualenv/issues/2282&gt;`_)
- Ugrade embedded setuptools to ``60.5.0`` from ``60.2.0`` - by :user:`asottile`. (`[#2289](pypa/virtualenv#2289) &lt;https://github.com/pypa/virtualenv/issues/2289&gt;`_)
- Upgrade embedded pip to ``22.0.3`` and setuptools to ``60.6.0`` - by :user:`gaborbernat` and :user:`asottile`. (`[#2294](pypa/virtualenv#2294) &lt;https://github.com/pypa/virtualenv/issues/2294&gt;`_)
<h2>v20.13.0 (2022-01-02)</h2>
<p>Features - 20.13.0
</code></pre></p>
<ul>
<li>Add downloaded wheel information in the relevant JSON embed file to
prevent additional downloads of the same wheel. - by :user:<code>mayeut</code>. (<code>[#2268](pypa/virtualenv#2268) &lt;https://github.com/pypa/virtualenv/issues/2268&gt;</code>_)</li>
</ul>
<p>Bugfixes - 20.13.0</p>

</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a href="https://github.com/pypa/virtualenv/commit/a731637cbaf2da326a8ce5c857e2e873ef1120ce"><code>a731637</code></a> release 20.14.0</li>
<li><a href="https://github.com/pypa/virtualenv/commit/04296970d44c5399ed84cd6008901bd1be96b20d"><code>0429697</code></a> Bump embeded setuptools to v61 (<a href="https://github-redirect.dependabot.com/pypa/virtualenv/issues/2322">#2322</a>)</li>
<li><a href="https://github.com/pypa/virtualenv/commit/ee018a3b2d6684f6965e5ddbf14ed7477627160e"><code>ee018a3</code></a> Update Nushell activation scripts to 0.60 (<a href="https://github-redirect.dependabot.com/pypa/virtualenv/issues/2321">#2321</a>)</li>
<li>See full diff in <a href="https://github.com/pypa/virtualenv/compare/20.13.4...20.14.0">compare view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=virtualenv&package-manager=pip&previous-version=20.13.4&new-version=20.14.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)


</details>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants