5
5
import textwrap
6
6
import venv as _venv
7
7
from pathlib import Path
8
- from typing import TYPE_CHECKING , Optional , Union
8
+ from typing import TYPE_CHECKING , Dict , Optional , Union
9
9
10
10
import virtualenv as _virtualenv
11
11
@@ -120,6 +120,21 @@ def _customize_site(self) -> None:
120
120
# Make sure bytecode is up-to-date too.
121
121
assert compileall .compile_file (str (sitecustomize ), quiet = 1 , force = True )
122
122
123
+ def _rewrite_pyvenv_cfg (self , replacements : Dict [str , str ]) -> None :
124
+ pyvenv_cfg = self .location .joinpath ("pyvenv.cfg" )
125
+ lines = pyvenv_cfg .read_text (encoding = "utf-8" ).splitlines ()
126
+
127
+ def maybe_replace_line (line : str ) -> str :
128
+ key = line .split ("=" , 1 )[0 ].strip ()
129
+ try :
130
+ value = replacements [key ]
131
+ except KeyError : # No need to replace.
132
+ return line
133
+ return f"{ key } = { value } "
134
+
135
+ lines = [maybe_replace_line (line ) for line in lines ]
136
+ pyvenv_cfg .write_text ("\n " .join (lines ), encoding = "utf-8" )
137
+
123
138
def clear (self ) -> None :
124
139
self ._create (clear = True )
125
140
@@ -144,4 +159,7 @@ def user_site_packages(self) -> bool:
144
159
@user_site_packages .setter
145
160
def user_site_packages (self , value : bool ) -> None :
146
161
self ._user_site_packages = value
162
+ self ._rewrite_pyvenv_cfg (
163
+ {"include-system-site-packages" : str (bool (value )).lower ()}
164
+ )
147
165
self ._customize_site ()
0 commit comments