这是我的setup.py
setup(
name='shipane_sdk',
version='1.0.0.a5',
# ...
data_files=[(os.path.join(os.path.expanduser('~'), '.shipane_sdk', 'config'), ['config/scheduler-example.ini'])],
# ...
)
包装&上传命令:
python setup.py sdist
python setup.py bdist_wheel --universal
twine upload dist/*
安装命令:
pip install shipane_sdk
但是,它没有在〜/ .shipane_sdk
下安装 config / scheduler-example.inipip文件说:
setuptools允许绝对的“data_files”路径,而pip将它们称为 绝对,从sdist安装时。安装时不是这样 来自车轮分布。车轮不支持绝对路径,并且 它们最终相对于“site-packages”进行安装。对于 讨论见问题#92。
你知道怎么做从sdist安装?
答案 0 :(得分:0)
这个问题有多种解决方案,包装工具的不一致性非常令人困惑。前段时间我发现以下解决方法最适合我使用sdist(注意它不适用于轮子!):
不使用data_files,而是使用MANIFEST.in将文件附加到您的包中,在您的情况下可能如下所示:
include config/scheduler-example.ini
使用setup.py中的以下代码段“手动”将文件复制到所选位置:
if 'install' in sys.argv:
from pkg_resources import Requirement, resource_filename
import os
import shutil
# retrieve the temporary path where the package has been extracted to for installation
conf_path_temp = resource_filename(Requirement.parse(APP_NAME), "conf")
# if the config directory tree doesn't exist, create it
if not os.path.exists(CONFIG_PATH):
os.makedirs(CONFIG_PATH)
# copy every file from given location to the specified ``CONFIG_PATH``
for file_name in os.listdir(conf_path_temp):
file_path_full = os.path.join(conf_path_temp, file_name)
if os.path.isfile(file_path_full):
shutil.copy(file_path_full, CONFIG_PATH)
在我的情况下,“conf”是包中包含我的数据文件的子目录,它们应该被安装到CONFIG_PATH中,类似于/ etc / APP_NAME