PermissionError: [Errno 13] Permission denied: '/usr/src/demo'
See original GitHub issue- Poetry version: 1.2.2
- Python version: 3.11.0
- OS version and name: Fedora Rawhide
- pyproject.toml:
- I am on the latest stable Poetry version, installed using a recommended method.
- I have searched the issues of this repo and believe that this is not a duplicate.
- I have consulted the FAQ and blog for any relevant entries or release notes.
- If an exception occurs when executing a command, I executed it again in debug mode (
-vvvoption) and have included the output below.
Issue
When building poetry 1.2.2 on Fedora we ran into PermissionError: [Errno 13] Permission denied: '/usr/src/demo'. Following tests has failed:
=========================== short test summary info ============================
FAILED tests/installation/test_installer.py::test_installer_uses_prereleases_if_they_are_compatible
FAILED tests/installation/test_installer.py::test_installer_should_use_the_locked_version_of_git_dependencies_with_extras[False]
FAILED tests/installation/test_installer.py::test_installer_should_use_the_locked_version_of_git_dependencies_without_reference[False]
FAILED tests/installation/test_installer_old.py::test_installer_uses_prereleases_if_they_are_compatible
FAILED tests/installation/test_pip_installer.py::test_requirement_git_subdirectory
====== 5 failed, 1027 passed, 5 skipped, 424 warnings in 74.37s (0:01:14) ======
We run tests using pytest and they aren’t running inside the virtual environment.
+ CFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection'
+ LDFLAGS='-Wl,-z,relro -Wl,--as-needed -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -Wl,--build-id=sha1 -specs=/usr/lib/rpm/redhat/redhat-package-notes'
+ PATH=/builddir/build/BUILDROOT/poetry-1.2.2-2.fc38.x86_64/usr/bin:/builddir/.local/bin:/builddir/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/sbin
+ PYTHONPATH=/builddir/build/BUILDROOT/poetry-1.2.2-2.fc38.x86_64/usr/lib64/python3.11/site-packages:/builddir/build/BUILDROOT/poetry-1.2.2-2.fc38.x86_64/usr/lib/python3.11/site-packages
+ PYTHONDONTWRITEBYTECODE=1
+ PYTEST_ADDOPTS=' --ignore=/builddir/build/BUILD/poetry-1.2.2/.pyproject-builddir'
+ /usr/bin/pytest -k 'not lock_no_update and not test_uninstall_git_package_nspkg_pth_cleanup and not export_exports_requirements_txt_file_locks_if_no_lock_file and not executor and not editable_builder' --ignore tests/config/test_config.py --ignore tests/console/commands/test_config.py --ignore tests/masonry/builders/test_editable_builder.py --ignore tests/test_factory.py --ignore tests/utils/test_dependency_specification.py
In that case, installer fixture uses NullEnv and returns the path using sys.prefix as /usr/, installer.py then appends src into it.
It’s possible that it also fails with the same error when a user uses NullEnv and dependencies from git.
https://github.com/python-poetry/poetry/blob/c9e6d5e4c6abdd0296f2467a674cf21e59bef42a/src/poetry/utils/env.py#L1880 https://github.com/python-poetry/poetry/blob/6096ac536672c27e000590024d7f9fd2c7cb57ad/src/poetry/installation/installer.py#L211
When this runs outside of the virtual environment, it crashes with a permission error.
E PermissionError: [Errno 13] Permission denied: '/usr/src/demo'
See full traceback below.
full traceback
____________ test_installer_uses_prereleases_if_they_are_compatible ____________
[gw0] linux -- Python 3.11.0 /usr/bin/python3
installer = <tests.installation.test_installer.Installer object at 0x7fb32f48ad50>
locker = <tests.installation.test_installer.Locker object at 0x7fb3306b85d0>
package = Package('root', '1.0')
repo = <poetry.repositories.repository.Repository object at 0x7fb3306b86d0>
def test_installer_uses_prereleases_if_they_are_compatible(
installer: Installer, locker: Locker, package: ProjectPackage, repo: Repository
):
package.python_versions = "~2.7 || ^3.4"
package.add_dependency(
Factory.create_dependency(
"prerelease", {"git": "https://github.com/demo/prerelease.git"}
)
)
package_b = get_package("b", "2.0.0")
package_b.add_dependency(Factory.create_dependency("prerelease", ">=0.19"))
repo.add_package(package_b)
> installer.run()
tests/installation/test_installer.py:2294:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
../../BUILDROOT/poetry-1.2.2-2.fc38.x86_64/usr/lib/python3.11/site-packages/poetry/installation/installer.py:115: in run
return self._do_install()
../../BUILDROOT/poetry-1.2.2-2.fc38.x86_64/usr/lib/python3.11/site-packages/poetry/installation/installer.py:248: in _do_install
ops = solver.solve(use_latest=self._whitelist).calculate_operations()
../../BUILDROOT/poetry-1.2.2-2.fc38.x86_64/usr/lib/python3.11/site-packages/poetry/puzzle/solver.py:73: in solve
packages, depths = self._solve(use_latest=use_latest)
../../BUILDROOT/poetry-1.2.2-2.fc38.x86_64/usr/lib/python3.11/site-packages/poetry/puzzle/solver.py:151: in _solve
result = resolve_version(
../../BUILDROOT/poetry-1.2.2-2.fc38.x86_64/usr/lib/python3.11/site-packages/poetry/mixology/__init__.py:24: in resolve_version
return solver.solve()
../../BUILDROOT/poetry-1.2.2-2.fc38.x86_64/usr/lib/python3.11/site-packages/poetry/mixology/version_solver.py:127: in solve
next = self._choose_package_version()
../../BUILDROOT/poetry-1.2.2-2.fc38.x86_64/usr/lib/python3.11/site-packages/poetry/mixology/version_solver.py:446: in _choose_package_version
package = self._provider.complete_package(package)
../../BUILDROOT/poetry-1.2.2-2.fc38.x86_64/usr/lib/python3.11/site-packages/poetry/puzzle/provider.py:555: in complete_package
self.search_for_direct_origin_dependency(r)
../../BUILDROOT/poetry-1.2.2-2.fc38.x86_64/usr/lib/python3.11/site-packages/poetry/puzzle/provider.py:229: in search_for_direct_origin_dependency
package = self._search_for_vcs(dependency)
../../BUILDROOT/poetry-1.2.2-2.fc38.x86_64/usr/lib/python3.11/site-packages/poetry/puzzle/provider.py:311: in _search_for_vcs
package = self.get_package_from_vcs(
../../BUILDROOT/poetry-1.2.2-2.fc38.x86_64/usr/lib/python3.11/site-packages/poetry/puzzle/provider.py:341: in get_package_from_vcs
return _get_package_from_git(
../../BUILDROOT/poetry-1.2.2-2.fc38.x86_64/usr/lib/python3.11/site-packages/poetry/puzzle/provider.py:95: in _get_package_from_git
source = Git.clone(
tests/helpers.py:122: in mock_clone
dest.parent.mkdir(parents=True, exist_ok=True)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = PosixPath('/usr/src/demo'), mode = 511, parents = True, exist_ok = True
def mkdir(self, mode=0o777, parents=False, exist_ok=False):
"""
Create a new directory at this given path.
"""
try:
> os.mkdir(self, mode)
E PermissionError: [Errno 13] Permission denied: '/usr/src/demo'
/usr/lib64/python3.11/pathlib.py:1116: PermissionError
_ test_installer_should_use_the_locked_version_of_git_dependencies_with_extras[False] _
[gw0] linux -- Python 3.11.0 /usr/bin/python3
installer = <tests.installation.test_installer.Installer object at 0x7fb32ebf7710>
locker = <tests.installation.test_installer.Locker object at 0x7fb3306db6d0>
package = Package('root', '1.0')
repo = <poetry.repositories.repository.Repository object at 0x7fb3306d9f10>
is_locked = False
@pytest.mark.parametrize("is_locked", [False, True])
def test_installer_should_use_the_locked_version_of_git_dependencies_with_extras(
installer: Installer,
locker: Locker,
package: ProjectPackage,
repo: Repository,
is_locked: bool,
):
if is_locked:
locker.locked(True)
locker.mock_lock_data(fixture("with-vcs-dependency-with-extras"))
expected_reference = "123456"
else:
expected_reference = MOCK_DEFAULT_GIT_REVISION
package.add_dependency(
Factory.create_dependency(
"demo",
{
"git": "https://github.com/demo/demo.git",
"branch": "master",
"extras": ["foo"],
},
)
)
repo.add_package(get_package("pendulum", "1.4.4"))
repo.add_package(get_package("cleo", "1.0.0"))
> installer.run()
tests/installation/test_installer.py:2508:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
../../BUILDROOT/poetry-1.2.2-2.fc38.x86_64/usr/lib/python3.11/site-packages/poetry/installation/installer.py:115: in run
return self._do_install()
../../BUILDROOT/poetry-1.2.2-2.fc38.x86_64/usr/lib/python3.11/site-packages/poetry/installation/installer.py:248: in _do_install
ops = solver.solve(use_latest=self._whitelist).calculate_operations()
../../BUILDROOT/poetry-1.2.2-2.fc38.x86_64/usr/lib/python3.11/site-packages/poetry/puzzle/solver.py:73: in solve
packages, depths = self._solve(use_latest=use_latest)
../../BUILDROOT/poetry-1.2.2-2.fc38.x86_64/usr/lib/python3.11/site-packages/poetry/puzzle/solver.py:151: in _solve
result = resolve_version(
../../BUILDROOT/poetry-1.2.2-2.fc38.x86_64/usr/lib/python3.11/site-packages/poetry/mixology/__init__.py:24: in resolve_version
return solver.solve()
../../BUILDROOT/poetry-1.2.2-2.fc38.x86_64/usr/lib/python3.11/site-packages/poetry/mixology/version_solver.py:127: in solve
next = self._choose_package_version()
../../BUILDROOT/poetry-1.2.2-2.fc38.x86_64/usr/lib/python3.11/site-packages/poetry/mixology/version_solver.py:446: in _choose_package_version
package = self._provider.complete_package(package)
../../BUILDROOT/poetry-1.2.2-2.fc38.x86_64/usr/lib/python3.11/site-packages/poetry/puzzle/provider.py:555: in complete_package
self.search_for_direct_origin_dependency(r)
../../BUILDROOT/poetry-1.2.2-2.fc38.x86_64/usr/lib/python3.11/site-packages/poetry/puzzle/provider.py:229: in search_for_direct_origin_dependency
package = self._search_for_vcs(dependency)
../../BUILDROOT/poetry-1.2.2-2.fc38.x86_64/usr/lib/python3.11/site-packages/poetry/puzzle/provider.py:311: in _search_for_vcs
package = self.get_package_from_vcs(
../../BUILDROOT/poetry-1.2.2-2.fc38.x86_64/usr/lib/python3.11/site-packages/poetry/puzzle/provider.py:341: in get_package_from_vcs
return _get_package_from_git(
../../BUILDROOT/poetry-1.2.2-2.fc38.x86_64/usr/lib/python3.11/site-packages/poetry/puzzle/provider.py:95: in _get_package_from_git
source = Git.clone(
tests/helpers.py:122: in mock_clone
dest.parent.mkdir(parents=True, exist_ok=True)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = PosixPath('/usr/src/demo'), mode = 511, parents = True, exist_ok = True
def mkdir(self, mode=0o777, parents=False, exist_ok=False):
"""
Create a new directory at this given path.
"""
try:
> os.mkdir(self, mode)
E PermissionError: [Errno 13] Permission denied: '/usr/src/demo'
/usr/lib64/python3.11/pathlib.py:1116: PermissionError
_ test_installer_should_use_the_locked_version_of_git_dependencies_without_reference[False] _
[gw0] linux -- Python 3.11.0 /usr/bin/python3
installer = <tests.installation.test_installer.Installer object at 0x7fb33295dad0>
locker = <tests.installation.test_installer.Locker object at 0x7fb32e5df890>
package = Package('root', '1.0')
repo = <poetry.repositories.repository.Repository object at 0x7fb32e5dc790>
is_locked = False
@pytest.mark.parametrize("is_locked", [False, True])
def test_installer_should_use_the_locked_version_of_git_dependencies_without_reference(
installer: Installer,
locker: Locker,
package: ProjectPackage,
repo: Repository,
is_locked: bool,
):
"""
If there is no explicit reference (branch or tag or rev) in pyproject.toml,
HEAD is used.
"""
if is_locked:
locker.locked(True)
locker.mock_lock_data(fixture("with-vcs-dependency-without-ref"))
expected_reference = "123456"
else:
expected_reference = MOCK_DEFAULT_GIT_REVISION
package.add_dependency(
Factory.create_dependency("demo", {"git": "https://github.com/demo/demo.git"})
)
repo.add_package(get_package("pendulum", "1.4.4"))
> installer.run()
tests/installation/test_installer.py:2546:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
../../BUILDROOT/poetry-1.2.2-2.fc38.x86_64/usr/lib/python3.11/site-packages/poetry/installation/installer.py:115: in run
return self._do_install()
../../BUILDROOT/poetry-1.2.2-2.fc38.x86_64/usr/lib/python3.11/site-packages/poetry/installation/installer.py:248: in _do_install
ops = solver.solve(use_latest=self._whitelist).calculate_operations()
../../BUILDROOT/poetry-1.2.2-2.fc38.x86_64/usr/lib/python3.11/site-packages/poetry/puzzle/solver.py:73: in solve
packages, depths = self._solve(use_latest=use_latest)
../../BUILDROOT/poetry-1.2.2-2.fc38.x86_64/usr/lib/python3.11/site-packages/poetry/puzzle/solver.py:151: in _solve
result = resolve_version(
../../BUILDROOT/poetry-1.2.2-2.fc38.x86_64/usr/lib/python3.11/site-packages/poetry/mixology/__init__.py:24: in resolve_version
return solver.solve()
../../BUILDROOT/poetry-1.2.2-2.fc38.x86_64/usr/lib/python3.11/site-packages/poetry/mixology/version_solver.py:127: in solve
next = self._choose_package_version()
../../BUILDROOT/poetry-1.2.2-2.fc38.x86_64/usr/lib/python3.11/site-packages/poetry/mixology/version_solver.py:446: in _choose_package_version
package = self._provider.complete_package(package)
../../BUILDROOT/poetry-1.2.2-2.fc38.x86_64/usr/lib/python3.11/site-packages/poetry/puzzle/provider.py:555: in complete_package
self.search_for_direct_origin_dependency(r)
../../BUILDROOT/poetry-1.2.2-2.fc38.x86_64/usr/lib/python3.11/site-packages/poetry/puzzle/provider.py:229: in search_for_direct_origin_dependency
package = self._search_for_vcs(dependency)
../../BUILDROOT/poetry-1.2.2-2.fc38.x86_64/usr/lib/python3.11/site-packages/poetry/puzzle/provider.py:311: in _search_for_vcs
package = self.get_package_from_vcs(
../../BUILDROOT/poetry-1.2.2-2.fc38.x86_64/usr/lib/python3.11/site-packages/poetry/puzzle/provider.py:341: in get_package_from_vcs
return _get_package_from_git(
../../BUILDROOT/poetry-1.2.2-2.fc38.x86_64/usr/lib/python3.11/site-packages/poetry/puzzle/provider.py:95: in _get_package_from_git
source = Git.clone(
tests/helpers.py:122: in mock_clone
dest.parent.mkdir(parents=True, exist_ok=True)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = PosixPath('/usr/src/demo'), mode = 511, parents = True, exist_ok = True
def mkdir(self, mode=0o777, parents=False, exist_ok=False):
"""
Create a new directory at this given path.
"""
try:
> os.mkdir(self, mode)
E PermissionError: [Errno 13] Permission denied: '/usr/src/demo'
/usr/lib64/python3.11/pathlib.py:1116: PermissionError
____________ test_installer_uses_prereleases_if_they_are_compatible ____________
[gw0] linux -- Python 3.11.0 /usr/bin/python3
installer = <tests.installation.test_installer_old.Installer object at 0x7fb3301ee510>
locker = <tests.installation.test_installer_old.Locker object at 0x7fb33015fe50>
package = Package('root', '1.0')
repo = <poetry.repositories.repository.Repository object at 0x7fb33015c710>
def test_installer_uses_prereleases_if_they_are_compatible(
installer: Installer, locker: Locker, package: ProjectPackage, repo: Repository
):
package.python_versions = "~2.7 || ^3.4"
package.add_dependency(
Factory.create_dependency(
"prerelease", {"git": "https://github.com/demo/prerelease.git"}
)
)
package_b = get_package("b", "2.0.0")
package_b.add_dependency(Factory.create_dependency("prerelease", ">=0.19"))
repo.add_package(package_b)
> installer.run()
tests/installation/test_installer_old.py:1852:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
../../BUILDROOT/poetry-1.2.2-2.fc38.x86_64/usr/lib/python3.11/site-packages/poetry/installation/installer.py:115: in run
return self._do_install()
../../BUILDROOT/poetry-1.2.2-2.fc38.x86_64/usr/lib/python3.11/site-packages/poetry/installation/installer.py:248: in _do_install
ops = solver.solve(use_latest=self._whitelist).calculate_operations()
../../BUILDROOT/poetry-1.2.2-2.fc38.x86_64/usr/lib/python3.11/site-packages/poetry/puzzle/solver.py:73: in solve
packages, depths = self._solve(use_latest=use_latest)
../../BUILDROOT/poetry-1.2.2-2.fc38.x86_64/usr/lib/python3.11/site-packages/poetry/puzzle/solver.py:151: in _solve
result = resolve_version(
../../BUILDROOT/poetry-1.2.2-2.fc38.x86_64/usr/lib/python3.11/site-packages/poetry/mixology/__init__.py:24: in resolve_version
return solver.solve()
../../BUILDROOT/poetry-1.2.2-2.fc38.x86_64/usr/lib/python3.11/site-packages/poetry/mixology/version_solver.py:127: in solve
next = self._choose_package_version()
../../BUILDROOT/poetry-1.2.2-2.fc38.x86_64/usr/lib/python3.11/site-packages/poetry/mixology/version_solver.py:446: in _choose_package_version
package = self._provider.complete_package(package)
../../BUILDROOT/poetry-1.2.2-2.fc38.x86_64/usr/lib/python3.11/site-packages/poetry/puzzle/provider.py:555: in complete_package
self.search_for_direct_origin_dependency(r)
../../BUILDROOT/poetry-1.2.2-2.fc38.x86_64/usr/lib/python3.11/site-packages/poetry/puzzle/provider.py:229: in search_for_direct_origin_dependency
package = self._search_for_vcs(dependency)
../../BUILDROOT/poetry-1.2.2-2.fc38.x86_64/usr/lib/python3.11/site-packages/poetry/puzzle/provider.py:311: in _search_for_vcs
package = self.get_package_from_vcs(
../../BUILDROOT/poetry-1.2.2-2.fc38.x86_64/usr/lib/python3.11/site-packages/poetry/puzzle/provider.py:341: in get_package_from_vcs
return _get_package_from_git(
../../BUILDROOT/poetry-1.2.2-2.fc38.x86_64/usr/lib/python3.11/site-packages/poetry/puzzle/provider.py:95: in _get_package_from_git
source = Git.clone(
tests/helpers.py:122: in mock_clone
dest.parent.mkdir(parents=True, exist_ok=True)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = PosixPath('/usr/src/demo'), mode = 511, parents = True, exist_ok = True
def mkdir(self, mode=0o777, parents=False, exist_ok=False):
"""
Create a new directory at this given path.
"""
try:
> os.mkdir(self, mode)
E PermissionError: [Errno 13] Permission denied: '/usr/src/demo'
/usr/lib64/python3.11/pathlib.py:1116: PermissionError
______________________ test_requirement_git_subdirectory _______________________
[gw0] linux -- Python 3.11.0 /usr/bin/python3
pool = <poetry.repositories.pool.Pool object at 0x7fb3301b9fd0>
package_git_with_subdirectory = Package('subdirectories', '2.0.0', source_type='git', source_url='https://github.com/demo/subdirectories.git', source_reference='master', source_subdirectory='two')
def test_requirement_git_subdirectory(
pool: Pool, package_git_with_subdirectory: Package
) -> None:
null_env = NullEnv()
installer = PipInstaller(null_env, NullIO(), pool)
result = installer.requirement(package_git_with_subdirectory)
expected = (
"git+https://github.com/demo/subdirectories.git"
"@master#egg=subdirectories&subdirectory=two"
)
assert result == expected
> installer.install(package_git_with_subdirectory)
tests/installation/test_pip_installer.py:114:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
../../BUILDROOT/poetry-1.2.2-2.fc38.x86_64/usr/lib/python3.11/site-packages/poetry/installation/pip_installer.py:44: in install
self.install_git(package)
../../BUILDROOT/poetry-1.2.2-2.fc38.x86_64/usr/lib/python3.11/site-packages/poetry/installation/pip_installer.py:285: in install_git
source = Git.clone(
tests/helpers.py:122: in mock_clone
dest.parent.mkdir(parents=True, exist_ok=True)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = PosixPath('/usr/src/demo'), mode = 511, parents = True, exist_ok = True
def mkdir(self, mode=0o777, parents=False, exist_ok=False):
"""
Create a new directory at this given path.
"""
try:
> os.mkdir(self, mode)
E PermissionError: [Errno 13] Permission denied: '/usr/src/demo'
Issue Analytics
- State:
- Created a year ago
- Comments:6 (3 by maintainers)

Top Related StackOverflow Question
Your patch doesn’t apply cleanly – half of those errors are unresolved names.
All failing tests are working with the correct patch. Thank you.