<#2313 Pex external venv should copy wheel files> ...
# github-notifications
c
#2313 Pex external venv should copy wheel files Issue created by zmanji Peeled out of #2312 (comment) Thinking about it an external venv should copy files from the wheel cache instead of hardlinks / symlinks. In my case I use pex to create venvs for tools like VSCode. I could choose to edit a file in a venv for debugging purposes and if I do, I inadvertently corrupt the wheel cache. Example:
Copy code
PEX_SCRIPT='pex3' pex venv create -vv --copies --force -d ./tenv  --no-build 'cowsay==6.1'
Then remove the first line (
import re
) of
Copy code
./tenv/lib/python3.10/site-packages/cowsay/main.py
Then the venv is broken when I run:
Copy code
./tenv/bin/cowsay -t 'test'
Traceback (most recent call last):
  File "/home/zmanji/tmp/./tenv/bin/cowsay", line 14, in <module>
    sys.exit(entry_point())
  File "/home/zmanji/tmp/tenv/lib/python3.10/site-packages/cowsay/__main__.py", line 28, in cli
    char_funcs[args.character](args.text)
  File "/home/zmanji/tmp/tenv/lib/python3.10/site-packages/cowsay/__init__.py", line 24, in func
    draw(str(text), char_lines)
  File "/home/zmanji/tmp/tenv/lib/python3.10/site-packages/cowsay/main.py", line 54, in draw
    if len(re.sub(r'\s', '', text)) == 0:
NameError: name 're' is not defined
Even if I delete the venv and recreate it it still suffers from the same problem
Copy code
rm -rf ./tenv 
PEX_SCRIPT='pex3' pex venv create -vv --copies --force -d ./tenv  --no-build 'cowsay==6.1'
./tenv/bin/cowsay -t 'test'  
Traceback (most recent call last):
  File "/home/zmanji/tmp/./tenv/bin/cowsay", line 14, in <module>
    sys.exit(entry_point())
  File "/home/zmanji/tmp/tenv/lib/python3.10/site-packages/cowsay/__main__.py", line 28, in cli
    char_funcs[args.character](args.text)
  File "/home/zmanji/tmp/tenv/lib/python3.10/site-packages/cowsay/__init__.py", line 24, in func
    draw(str(text), char_lines)
  File "/home/zmanji/tmp/tenv/lib/python3.10/site-packages/cowsay/main.py", line 54, in draw
    if len(re.sub(r'\s', '', text)) == 0:
NameError: name 're' is not defined
The only way to fix this is to delete the pex wheel cache. A way to fix this is to overload the existing
--copies
flag to also copy files from the wheel cache or to introduce another flag to signal this and change this function pex/pex/pep_376.py Lines 350 to 404 in </pantsbuild/pex/commit/4eb5c9aa25c6a695bf55263ab239189b720cebaf|4eb5c9a> to do copies instead of links. pantsbuild/pex