Запуск `chmod` после установки пакета с помощью` setup.py` - PullRequest
4 голосов
/ 07 ноября 2011

Предположим, у меня есть пакет, который вызывает исполняемый файл где-то в коде (например, сторонняя c / java-программа). Предположим далее, что приложение достаточно маленькое / тривиальное, чтобы связать его с пакетом. Например, один исполняемый файл (cfoo).

Я мог бы пойти дальше и поместить файлы в следующую структуру:

.
|-- foo
|   |-- __init__.py
|   |-- __init__.pyc
|   |-- core.py
|   |-- corebin
|   |   `-- cfoo
|   `-- foomain.py
`-- setup.py

И приготовьте setup.py следующим образом:

from setuptools import setup

setup(
    name='foo',
    version='1.0',
    packages=['foo'],
    scripts=['foo/foomain.py'],
    package_data={'foo': ['corebin/*']},
    zip_safe=False
)

Это позволит мне правильно установить пакет. Позже, в коде пакета я мог сделать это:

from subprocess import call

import pkg_resources as res

def main():
    fn = res.resource_filename('foo', 'corebin/cfoo')
    print "Resource located at:", fn
    call([fn])

К сожалению, исполняемый файл будет установлен без установленного флага . Даже если исходный файл был установлен. Добавление вызова chmod в конце сценария setup.py не так просто, так как сначала нужно найти правильный путь установки. Я попытался с resource_filename, но это вернуло локальный файл (как в «предварительной установке»).

Как решить эту проблему? Также с учетом virtualenv ...

1 Ответ

2 голосов
/ 08 ноября 2011

Я продвигаю свой комментарий к ответу:

Если вы установите его с помощью ключевого слова scripts, он получит правильный режим (и будет установлен в соответствующем каталоге bin /).

Как бы вы выполнили что-то для файлов, содержащихся в пакете после установки?

Этот вопрос может показаться таким же, и выглядиту него есть разумный ответ.

...