如何控制`pip`复制哪些文件以建立目录

时间:2019-11-13 19:17:23

标签: pip setuptools

将文件复制到pip的构建目录

(令人讨厌的)用例:我有一个第三方子项目,我必须赋予它setup.py,这样它才能运行make并生成某些要在scripts=中列出的工件。我从setuptools.install.install派生了一个类,其中chdir() s到与__file__make s相邻的文件夹中。 但是,当使用pip install运行时,pip只会将似乎是源文件的内容复制到构建目录中。 我尝试指定data_files=,但这没有帮助。

如何提示pip将特定文件复制到构建目录?

P.S。我知道要解决似乎是一个错误的问题,但是我确实专门要复制这些文件以构建目录,复制到make并向轮子添加工件。


UPD:在setup.py MVE上回复comment

示例项目结构:

├── 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/**'))
          ]
      )

UPD:MANIFEST.in

尝试了一下,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

0 个答案:

没有答案