выпуск
Мне нужно создать пакет python, который будет иметь доступ к R-скрипту и сделать его устанавливаемым в pip
Настройка:
Моя структура пакета выглядит следующим образом
foo/
setup.py
foo/
foo.R
Содержимое setup.py
:
from setuptools import setup, find_packages
setup(
name='foo',
packages=find_packages(),
scripts=['foo/foo.R'],
zip_safe=False,
)
и содержимое foo.R
:
#!/usr/bin/env Rscript
R.version
Я устанавливаю этот пакет с:
pip install -e .
Когда я смотрю на установленный R-скрипт, он больше не является R-скриптом, поэтому, когда он вызывается, он запускается как python и поэтому завершается с ошибкой
$ cat $(which foo.R)
для просмотра содержимого файла
Что я ожидаю:
#!/usr/bin/env Rscript
R.version
Что я получу:
#!/Users/jc33/miniconda3/bin/python
# EASY-INSTALL-DEV-SCRIPT: 'foo==0.0.0','foo.R'
__requires__ = 'foo==0.0.0'
__import__('pkg_resources').require('foo==0.0.0')
__file__ = '/Users/jc33/Desktop/foo/foo/foo.R'
exec(compile(open(__file__).read(), __file__, 'exec'))
дополнительная область
Это очень надуманный пример, который был создан с единственной целью - найти решение, а не обсуждать преимущества поиска сценария R с помощью setuptools. Для получения дополнительной информации я создаю более сложный пакет Python, подобный this , который должен будет вызывать R в какой-то момент, это делается с помощью subprocess.run
, однако я считаю, что это выходит за рамки этого вопроса
Python=='3.5.2'
setuptools=='27.2.0'
pip=='10.0.1