包含setuptools安装目录

时间:2015-08-25 11:55:27

标签: python python-3.x packaging setuptools setup.py

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

我希望当前在源存储库中的插件随模块一起安装,以便在任何安装时默认加载它们。这最好存储在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

后,

会正确找到该目录

1 个答案:

答案 0 :(得分:1)

您的设置会通过创建一个每个人都可以导入的全局plugins模块或者每个人都会错误导入来破坏事物。不要那样做。相反,这样做:

  • 将您的myprog.py文件放入包中。最简单的方法:mkdir myprog; mv myprog.py myprog/__init__.py
  • 然后,您可以将插件移动到子包中。 touch plugins/__init__.py; mv plugins myprog/
  • 使用子包时,您根本不必使用包数据。
  • 要访问您的插件,只需为名为import myprog.plugins.foo的插件执行foo.py
  • 另外:请勿触摸__file__,而是使用pkg_resources
  • 奖励积分:use entry points用于您的剧本。