Как использовать setuptools.command.build_py из pip

Рейтинг: 1Ответов: 0Опубликовано: 23.08.2023

Пытаюсь генерировать питоновксий файл в процессе установки пакета.

Файл генерирую, переопределив команду 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, видимо, используется только для распаковки временных файлов, скаченных по сети.

Ответы

Ответов пока нет.