Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
P
python-poetry
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
open
python-poetry
Commits
1e8b3272
Commit
1e8b3272
authored
Sep 29, 2020
by
Arun Babu Neelicattu
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
env: enable usersite for system environments
Resolves: #2996
parent
cd8a329b
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
49 additions
and
13 deletions
+49
-13
poetry/masonry/builders/editable.py
+27
-11
poetry/utils/env.py
+11
-2
tests/utils/test_env.py
+11
-0
No files found.
poetry/masonry/builders/editable.py
View file @
1e8b3272
...
...
@@ -94,13 +94,7 @@ class EditableBuilder(Builder):
os
.
remove
(
str
(
setup
))
def
_add_pth
(
self
):
pth
=
self
.
_env
.
site_packages
.
joinpath
(
self
.
_module
.
name
)
.
with_suffix
(
".pth"
)
self
.
_debug
(
" - Adding <c2>{}</c2> to <b>{}</b> for {}"
.
format
(
pth
.
name
,
self
.
_env
.
site_packages
,
self
.
_poetry
.
file
.
parent
)
)
pth_file
=
Path
(
self
.
_module
.
name
)
.
with_suffix
(
".pth"
)
paths
=
set
()
for
include
in
self
.
_module
.
includes
:
if
isinstance
(
include
,
PackageInclude
)
and
(
...
...
@@ -108,11 +102,33 @@ class EditableBuilder(Builder):
):
paths
.
add
(
include
.
base
.
resolve
()
.
as_posix
())
with
pth
.
open
(
"w"
,
encoding
=
"utf-8"
)
as
f
:
for
path
in
paths
:
f
.
write
(
decode
(
path
+
os
.
linesep
))
content
=
""
for
path
in
paths
:
content
+=
decode
(
path
+
os
.
linesep
)
for
site_package
in
[
self
.
_env
.
site_packages
,
self
.
_env
.
usersite
]:
if
not
site_package
:
continue
return
[
pth
]
try
:
site_package
.
mkdir
(
parents
=
True
,
exist_ok
=
True
)
path
=
site_package
.
joinpath
(
pth_file
)
self
.
_debug
(
" - Adding <c2>{}</c2> to <b>{}</b> for {}"
.
format
(
path
.
name
,
site_package
,
self
.
_poetry
.
file
.
parent
)
)
path
.
write_text
(
content
,
encoding
=
"utf-8"
)
return
[
path
]
except
PermissionError
:
self
.
_debug
(
"- <b>{}</b> is not writable trying next available site"
)
self
.
_io
.
error_line
(
" - Failed to create <c2>{}</c2> for {}"
.
format
(
pth_file
.
name
,
self
.
_poetry
.
file
.
parent
)
)
return
[]
def
_add_scripts
(
self
):
added
=
[]
...
...
poetry/utils/env.py
View file @
1e8b3272
...
...
@@ -812,11 +812,15 @@ class Env(object):
@property
def
site_packages
(
self
):
# type: () -> Path
if
self
.
_site_packages
is
None
:
self
.
_site_packages
=
Path
(
self
.
purelib
)
self
.
_site_packages
=
self
.
purelib
return
self
.
_site_packages
@property
def
usersite
(
self
):
# type: () -> Optional[Path]
if
"usersite"
in
self
.
paths
:
return
Path
(
self
.
paths
[
"usersite"
])
@property
def
purelib
(
self
):
# type: () -> Path
if
self
.
_purelib
is
None
:
self
.
_purelib
=
Path
(
self
.
paths
[
"purelib"
])
...
...
@@ -1017,6 +1021,8 @@ class SystemEnv(Env):
# on some distributions it does not return the proper paths
# (those used by pip for instance). We go through distutils
# to get the proper ones.
import
site
from
distutils.command.install
import
SCHEME_KEYS
# noqa
from
distutils.core
import
Distribution
...
...
@@ -1033,6 +1039,9 @@ class SystemEnv(Env):
paths
[
key
]
=
getattr
(
obj
,
"install_{}"
.
format
(
key
))
if
site
.
check_enableusersite
()
and
hasattr
(
obj
,
"install_usersite"
):
paths
[
"usersite"
]
=
getattr
(
obj
,
"install_usersite"
)
return
paths
def
get_supported_tags
(
self
):
# type: () -> List[Tag]
...
...
tests/utils/test_env.py
View file @
1e8b3272
...
...
@@ -830,6 +830,17 @@ def test_system_env_has_correct_paths():
assert
env
.
site_packages
==
Path
(
paths
[
"purelib"
])
@pytest.mark.parametrize
(
(
"enabled"
,),
[(
True
,),
(
False
,)],
)
def
test_system_env_usersite
(
mocker
,
enabled
):
mocker
.
patch
(
"site.check_enableusersite"
,
return_value
=
enabled
)
env
=
SystemEnv
(
Path
(
sys
.
prefix
))
assert
(
enabled
and
env
.
usersite
is
not
None
)
or
(
not
enabled
and
env
.
usersite
is
None
)
def
test_venv_has_correct_paths
(
tmp_venv
):
paths
=
tmp_venv
.
paths
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment