在 setuptools 安装中包含一个目录

Include a directory with setuptools installation

我做了一个基于插件的程序,它从不同的目录加载插件,其中一个是模块所在的目录(为了方便 运行 在源存储库中放置以进行测试)。

我希望当前在源存储库中的插件与模块一起安装,以便在任何安装时默认加载它们。这最好存储在 setup() 创建的鸡蛋中。

目前源码库的重要部分如下:

/path/to/repo/
    plugins/
        example.py
    myprog.py # the module
    myprog    # the script
    setup.py

setup.py 看起来像这样:

from setuptools import setup

setup(
    name = 'myprog',
    version = '1.0',
    scripts = ['myprog'],
    py_modules = ['myprog'],

    package_data = {
        '': ['plugins/']
    }
)

但是,plugins 目录未以任何方式包含在安装中。

我怎样才能包含它以便行

os.path.join(os.path.dirname(os.path.realpath(__file__)), 'plugins')

将在 运行 python3 setup.py install?

之后正确找到该目录

您的设置会破坏全局 plugins 模块,每个人都可以导入,或者每个人都会错误地导入。不要那样做。相反,这样做:

  • 将您的 myprog.py 文件打包。最简单的方法:mkdir myprog; mv myprog.py myprog/__init__.py
  • 然后,您可以将您的插件移动到一个子包中。 touch plugins/__init__.py; mv plugins myprog/
  • 有了子包,你根本不用包数据。
  • 要访问您的插件,只需对名为 foo.py 的插件执行 import myprog.plugins.foo
  • 此外:不要触摸 __file__,请改用 pkg_resources
  • 奖励积分:use entry points 用于您的脚本。