我做了一个基于插件的程序,它从不同的目录加载插件,其中一个是模块所在的目录(为了方便在源存储库中运行以进行测试)。
我希望当前在源存储库中的插件随模块一起安装,以便在任何安装时默认加载它们。这最好存储在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
?后,会正确找到该目录
答案 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。