Как использовать setuptools.command.build_py из pip
Пытаюсь генерировать питоновксий файл в процессе установки пакета.
Файл генерирую, переопределив команду build_py:
setup.cfg
[metadata]
name = foo
version = 1.0
setup.py:
#!python
import os
import sys
import re
from setuptools import setup
from setuptools.command.build_py import build_py
from setuptools.command.build import build
import platform
print(f"run : {sys.argv}")
_script_template = """#!{python_full_path}
def foo():
print("Foo!")
"""
_script = _script_template.format( python_full_path = sys.executable )
class my_build_py(build_py):
def run(self):
# honor the --dry-run flag
print(f"self.dry_run: {self.dry_run}")
if not self.dry_run:
target_dir = self.build_lib
self.mkpath(target_dir)
print(f"os.path.join(target_dir, 'foo.py'): {os.path.join(target_dir, 'foo.py')}")
with open(os.path.join(target_dir, 'foo.py'), 'w') as fobj:
fobj.write(_script)
#with open('foo.py', 'w') as fobj:
# fobj.write(_script)
# distutils uses old-style classes, so no super()
build_py.run(self)
if __name__ == "__main__" :
setup( cmdclass={'build_py': my_build_py},
py_modules=['foo'],
)
запускаю:
C:\programming\Python311\python.exe -m pip install . --user
Если текущая папка (где лежит setup.py) с правами на запись, то пакет устанавливается нормально. нормально. Но если права в текущей папке ограничены, например папка внутри program files, то по ходу установки не удается создать временную папку, и получаю ошибку:
Processing c:\program files\foo
Installing build dependencies: started
Installing build dependencies: finished with status 'done'
Getting requirements to build wheel: started
Getting requirements to build wheel: finished with status 'error'
error: subprocess-exited-with-error
Getting requirements to build wheel did not run successfully.
exit code: 1
[4 lines of output]
run : ['setup.py', 'egg_info']
running egg_info
creating foo.egg-info
error: could not create 'foo.egg-info': Access is denied
[end of output]
note: This error originates from a subprocess, and is likely not a problem with pip.
error: subprocess-exited-with-error
Getting requirements to build wheel did not run successfully.
exit code: 1
See above for output.
note: This error originates from a subprocess, and is likely not a problem with pip.
Опция pip-а `--build-dir' больше не поддерживается. Переменная TMPDIR, видимо, используется только для распаковки временных файлов, скаченных по сети.
Источник: Stack Overflow на русском