Вопрос по installation, configuration, python, setup.py – настройка python setup.py для установки файлов в пользовательские каталоги

14

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

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

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

<code>/
  script.sh
  one.py
  two.py
  ...
  setup.py
  package/...
    __init__.py
    ...
</code>

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

<code>python setup.py install --prefix=/my/prefix
</code>

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

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

Solution

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

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

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

(Edit2)

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

<code>[install]
prefix=/my/prefix
</code>

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

<code>python setup.py install
</code>
Вот несколько полезных документов по этому вопросу:docs.python.org/2/install/… и здесьdocs.python.org/3/distutils/introduction.html Pierz

Ваш Ответ

1   ответ
9

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

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

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

Спасибо! data_files сделали это для меня. Другой вопрос, могу ли я иметь префикс по умолчанию? Если пользователь не указывает его, я хотел бы использовать свой собственный (вместо Python по умолчанию). Ago
Вы можете сделать настройки по умолчанию в файле setup.cfg. Он находится в файле опций в стиле .ini с разделами и парами имя-значение. Параметры командной строки напрямую переводятся в параметры там (удалить--, так далее).
работает как шарм, спасибо! Ago

Похожие вопросы