Подтвердить что ты не робот

Конфигурация python setup.py для установки файлов в пользовательских каталогах

Я хочу создать setup.py, который установит мои файлы в пользовательские каталоги. У меня есть определенный префикс, где я хотел бы получить следующий результат:

/my/prefix/
  bin/
    script.sh
  libexec/
    one.py
    two.py
    ...
  lib/pythonX.Y/site-packages/
    package/...

Мой первоначальный проект следующий:

/
  script.sh
  one.py
  two.py
  ...
  setup.py
  package/...
    __init__.py
    ...

Каким будет лучший способ достичь этого? Я хотел бы иметь возможность установить его позже с чем-то вроде:

python setup.py install --prefix=/my/prefix

Я могу получить "пакет", прекрасно установленный в правильном каталоге, поскольку lib/pythonX.Y/site-packages в разделе -prefix - это местоположение по умолчанию. Но есть ли чистый способ получить script.sh в "bin" и другие файлы python в "libexec"? Единственный способ добиться этого - это вручную скопировать эти файлы в мой setup.py script. Может быть, есть более чистый и более стандартный способ сделать это?

(редактировать)

Решение

Я закончил с setup.py как это:

setup(name='mylib',
  scripts=['script.sh'],
  data_files=[('libexec', ['one.py', 'two.py'])]
)

Конечно, вы можете перебирать все файлы python для libexec, но у меня есть только 2-3 файла python, которые мне нужны.

(edit2)

Кроме того, у меня может быть setup.cfg со следующим:

[install]
prefix=/my/prefix

и вместо python setup.py install --prefix=/my/prefix я могу просто сделать:

python setup.py install
4b9b3361

Ответ 1

Сценарии обрабатываются с помощью параметра scripts для функции настройки. Для libexec вы можете рассматривать их как файлы данных и использовать параметры данных.

setup(...
    scripts=glob("bin/*"),
    data_files=[(os.path.join(sys.prefix, 'libexec', 'mypackage'), glob("libexec/*"))],
    ...
)

Я не уверен, как это работает с опцией --prefix, я никогда не пробовал это.