在 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 用于您的脚本。
我做了一个基于插件的程序,它从不同的目录加载插件,其中一个是模块所在的目录(为了方便 运行 在源存储库中放置以进行测试)。
我希望当前在源存储库中的插件与模块一起安装,以便在任何安装时默认加载它们。这最好存储在 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 用于您的脚本。