gpt4 book ai didi

python - 在安装过程中复制配置文件的正确方法?

转载 作者:太空宇宙 更新时间:2023-11-03 14:03:30 25 4
gpt4 key购买 nike

我正在尝试分发我编写的mplstyle,以便我可以轻松共享它。它归结为在安装期间将文本文件复制到正确的配置方向(这对于任何体系结构都是已知的)。我希望能够使用 python setup.py installpip install ... 进行安装。目前,我似乎没有使这两种方法中的任何一种变得强大(请参阅下面的当前方法)。

  • 使用 pip install ... 安装似乎根本不会调用复制。
  • 使用 python setup.py install 进行安装在我的机器上运行良好,但 ReadTheDocs 给出了以下错误:

    python setup.py install --force

    running install
    error: [Errno 2] No such file or directory: u'/home/docs/.config/matplotlib/stylelib/goose.mplsty

在安装过程中以可靠的方式复制配置文件的正确方法是什么?

当前方法

文件结构

setup.py
goosempl/
| __init__.py
| stylelib/
| goose.mplstyle
| ...

setup.py

from setuptools                 import setup
from setuptools.command.install import install

class PostInstallCommand(install):

def run(self):

import goosempl
goosempl.copy_style()

install.run(self)

setup(
name = 'goosempl',
...,
install_requires = ['matplotlib>=2.0.0'],
packages = ['goosempl'],
cmdclass = {'install': PostInstallCommand},
package_data = {'goosempl/stylelib':['goosempl/stylelib/goose.mplstyle']},
)

goosempl/__init__.py

def copy_style():

import os
import matplotlib

from pkg_resources import resource_string

files = [
'stylelib/goose.mplstyle',
]

for fname in files:
path = os.path.join(matplotlib.get_configdir(),fname)
text = resource_string(__name__,fname).decode()

print(path, text)

open(path,'w').write(text)

上传到 PyPi

python setup.py bdist_wheel --universal
twine upload dist/*

最佳答案

首先,根据您提供的项目结构,您没有指定 package_data正确。如果goosempl是一个包并且 stylelib其中包含 mplstyle 的目录文件(我从你的代码中假设),然后是你的 package_data配置行应该是:

package_data = {'goosempl': ['stylelib/goose.mplstyle']},

Building and Distributing Packages with Setuptools 中所述:

The package_data argument is a dictionary that maps from package names to lists of glob patterns. The globs may include subdirectory names, if the data files are contained in a subdirectory of the package.

所以你的包裹是goosemplstylelib/goose.mplstyle是要包含在 goosempl 的包数据中的文件.

您的第二个问题( No such file or directory )很简单:在 copy_style() 中函数中,在写入文件之前从不检查文件的父目录是否存在。您应该能够通过删除目录 /home/<user>/.config/matplotlib/stylelib/ 在本地重现此内容。 (或暂时移动它)。

修复也很简单,其实有很多。使用您想要的任何内容来创建丢失的目录。

  • distutils.dir_util.mkpath 两者都适合python2python3 :

    for fname in files:
    path = os.path.join(matplotlib.get_configdir(), fname)
    distutils.dir_util.mkpath(os.dirname(path))
  • 我更喜欢使用 pathlib ,但仅自 Python 3.4 起可用:

    for fname in files:
    path = pathlib.Path(matplotlib.get_configdir(), fname)
    path.parent.mkdir(parents=True, exist_ok=True)

关于python - 在安装过程中复制配置文件的正确方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49084864/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com