(令人讨厌的)用例:我有一个第三方子项目,我必须赋予它setup.py,这样它才能运行make
并生成某些要在scripts=
中列出的工件。我从setuptools.install.install
派生了一个类,其中chdir()
s到与__file__
和make
s相邻的文件夹中。
但是,当使用pip install
运行时,pip
只会将似乎是源文件的内容复制到构建目录中。
我尝试指定data_files=
,但这没有帮助。
如何提示pip
将特定文件复制到构建目录?
P.S。我知道要解决似乎是一个错误的问题,但是我确实专门要复制这些文件以构建目录,复制到make
并向轮子添加工件。
示例项目结构:
├── libs
│ └── external
│ ├── Makefile
│ └── src
│ └── _...
├── setup.py
└── src
└── __init__.py
示例setup.py:
from setuptools import setup
from setuptools.command.install import install
from subprocess import Popen
import os
import glob
EXT_DIR = os.path.join(os.path.dirname(__file__), 'libs', 'external')
class RunMake(install):
"""Makefile on setuptools install."""
def run(self):
old_dir = os.getcwd()
try:
os.chdir(EXT_DIR)
self.spawn(['make'])
finally:
os.chdir(old_dir)
install.run(self)
setup(name='example',
version='0.0.1',
packages=['example'],
package_dir={'example': 'src'},
cmdclass={'install': RunMake},
scripts=['libs/external/build/bin/SomeBinary'],
data_files=[
('libs', glob.glob('libs/**'))
]
)
尝试了一下,Makefile仍然不存在
include libs/external/Makefile
include libs/external/*
生成的.egg-info:
setup.py
poisson_reconstruction.egg-info/PKG-INFO
poisson_reconstruction.egg-info/SOURCES.txt
poisson_reconstruction.egg-info/dependency_links.txt
poisson_reconstruction.egg-info/top_level.txt
src/__init__.py