Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何从src子目录外部添加package_data以便实际安装?

如何从src子目录外部添加package_data以便实际安装?
EN

Stack Overflow用户
提问于 2021-09-20 06:27:24
回答 2查看 424关注 0票数 0

我知道已有类似的问题,但答案对我的情况并无帮助。我相信,从那时起,随着.whl文件的引入和默认设置,情况发生了变化。

pip 21.2.4

python 3.9.5

情况就是这样。我有一个python项目,我正在为它生成发布的包。该项目将不会上传到公共存储库,因为它是一个用于控制我工作地点的自定义设备的库。

在发布的包中,我希望不仅包括.py文件,而且还包括其他文件,如配置文件模板、使用示例和其他文档。等。

让我们把重点放在模板上,因为rest是类似的。

我当前的项目结构(名称更改):

代码语言:javascript
运行
AI代码解释
复制
deviceFFS
+-dist
| \-generated release packages...
+-src
| \-deviceffs
|   +-__init__.py
|   \-other .py files...
+-template
| +-template_A.ini
| \-template_B.ini
+-tests
| \-some tests...
+-venv
| \-...
+-LICENSE
+-MANIFEST.in
+-pyproject.toml
+-README.md
+-requirements.txt
+-setup.cfg
\-setup.py

和配置文件的内容,然后再尝试添加其他文件:

setup.cfg:

代码语言:javascript
运行
AI代码解释
复制
[metadata]
name = deviceffs
version = 0.1.2
author = B
author_email = B
description = device for my job

[options]
python_requires= >=3.9
install_requires=
        configparser
        pyserial
package_dir=
        =src
packages=find:

[options.packages.find]
where=src

setup.py:

代码语言:javascript
运行
AI代码解释
复制
from setuptools import setup

setup()

pyproject.toml:

代码语言:javascript
运行
AI代码解释
复制
[build-system]
requires = [
        "setuptools",
        "wheel"
]
build-backend = "setuptools.build_meta"

好的,现在我要添加模板文件:

模板/模板_A.

模板/模板_B.ini

第一步:

我编辑了MANIFEST.in:

代码语言:javascript
运行
AI代码解释
复制
include template/*

并添加到setup.cfg中:

代码语言:javascript
运行
AI代码解释
复制
include_package_data=true

完成此操作后,生成的(python -m build) .tar.gz文件确实包含“模板”子目录。不知道.hwl文件,因为我不知道如何预览这些文件。但是,如果我使用python -m pip install -vvv在自定义项目中安装这个包(使用venv),那么无论我是从.tar.gz还是从.whl安装,都不会在任何地方安装这些文件。我使用-vvv查看由pip执行的每个文件复制操作,以查看它是否已安装。

第二步:

使用MANIFEST.in代替package_data。我从以前的aproach中恢复更改,而是编辑setup.py:

代码语言:javascript
运行
AI代码解释
复制
setup(package_data={"deviceffs": ["template/*"]})

不幸的是,这样我就可以从'.\src\deviceffs\template‘而不是'.\template’中获得文件,因为路径是相对于。

我不想将模板(以及将来的使用示例,其他描述)放到.\src中,也不想将它们单独分发到包中。

第三章:

用“package_data”代替“data_files”

这似乎是过去行之有效的解决办法。然而,现在pip默认使用.whl (即使是从.tar.gz安装),这似乎完全忽略了'data_files‘。

最后:

我没有主意了。

我今天大部分时间都在努力使生成的版本包含我的文件,而不是实际处理文件的实际内容。

来自互联网的信息是相互矛盾的。

我正在寻找如何正确配置这个的建议。

提前谢谢。

编辑以添加python和pip版本。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-09-21 09:44:40

看来您需要使用package_dir。我不太确定最终的软件包树结构,你的目标,所以我将猜测一点。

如果我假设您希望在包deviceffs.template中拥有模板文件,那么显然setuptools find_packages函数无法找到deviceffs.templates包,因为没有src/devicesffs/template目录。因此,我们不能完全依赖find_packages,而需要动态地修改setup.py中的packages列表。

从我的头顶上,没有测试

setup.py

代码语言:javascript
运行
AI代码解释
复制
#!/usr/bin/env python"
import setuptools
setuptools.setup(
    packages=setuptools.find_packages() + ['deviceffs.template'],
    package_dir={
        'deviceffs': 'src/deviceffs',
        'deviceffs.template': 'template',
    },
    # The rest is in 'setup.cfg'
)

差不多吧。您还可能需要添加一个template/__init__.py文件。

票数 1
EN

Stack Overflow用户

发布于 2021-09-20 07:06:42

recursive-include template/ *.ini添加到MANIFEST.in为我工作

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69256134

复制
相关文章
python for循环多个参数处理_python for循环嵌套
实际上,“使用for循环遍历数组的最简单方法”(Python类型被命名为“list”BTW)是第二种方法,即for item in somelist:
全栈程序员站长
2022/09/22
2.3K0
PythonWebServer如何同时处理多个请求
源于知乎上一个问题:https://www.zhihu.com/question/56472691/answer/293292349
the5fire
2019/03/01
1.9K0
【Python】函数进阶 ① ( 函数返回多个返回值 | 函数参数传递类型简介 | 位置参数 | 关键字参数 )
在函数中 , 如果要 返回 多个返回值 , 可以 在 return 语句中 , 设置多个返回值 , 这些返回值之间使用 逗号 隔开 , 这些返回值的类型是 元组 tuple 类型的 ;
韩曙亮
2023/10/11
1.6K0
【说站】python关键字如何传递参数
1、关键词传递以“形参变量名=实参”的形式参与实参关联,根据形参的名称进行参数传递,使实参和形参的顺序不一致。
很酷的站长
2022/11/23
9460
Python函数参数总结(位置参数、默认参数、可变参数、关键字参数和命名关键字参数)
Python函数的参数多达5种,不像Java那样参数只有一种,而是像C++那样提供默认参数,除此之外,还提供可变参数、关键字参数、命名关键字参数,这样就使得Python函数的参数变得十分复杂。但复杂意味着灵活便捷,Python语言之所以流行起来,与起本身巨大的灵活性是分不开的。可以说Python是最方便使用的语言。 Python参数类型: - 位置参数(positional arguments,官方定义,就是其他语言所说的参数) - 默认参数(类似C++的默认参数) - 可
Steve Wang
2018/02/05
22.3K0
Python函数参数总结(位置参数、默认参数、可变参数、关键字参数和命名关键字参数)
Golang 获取GET、POST参数及处理上传多个文件
http.request的三个属性Form、PostForm、MultipartForm:
IT工作者
2022/06/30
2.1K0
Python 的 map 函数也可以处理多个参数的函数
比起 map 带给程序员的理解负担,大多数 Python 程序员更喜欢列表推导来解决问题。
somenzz
2022/10/25
2.9K0
Python 的 map 函数也可以处理多个参数的函数
python返回多个参数
比如在游戏中经常需要从一个点移动到另一个点,给出坐标、位移和角度,就可以计算出新的新的坐标:
狼啸风云
2020/07/16
2.7K0
Python 关键字参数和可变参数
如果你有一些具有许多参数的函数,而你又希望只对其中的一些进行指定,那么你可以通过命名它们来给这些参数赋值——这就是python关键字参数(Keyword Arguments)——我们使用命名(关键字)而非位置(一直以来我们所使用的方式)来指定函数中的参数。
py3study
2020/01/16
1.2K0
JS中如何处理多个ajax并发请求?
通常 为了减少页面加载时间,先把核心内容显示处理,页面加载完成后再发送ajax请求获取其他数据 这时就可能产生多个ajax请求,为了用户体验,最好是发送并行请求,这就产生了并发问题,应该如何处理? (1)并行改串行 如果业务逻辑和用户体验允许的情况下,可以改为串行,处理起来最简单 function async1(){ //do sth... async2(); } function async2(){ //do sth... } async1(); (2)回调计数 function
dys
2018/04/02
5.5K0
函数的关键字参数
def func1(name, age, sex, *args): ''' 打印姓名,年龄,性别 ''' print(name) print(age) print(sex) # func1('python', 28,sex='man','s','23') ## 工作经验:不定长参数都是放到最后 func1(name='python', age=30, sex='nv') help(func1) # def func1(a,b, c=100,*args,**
汪凡
2018/05/29
5470
Seata如何处理跨多个请求的事务?
Seata 是一种开源的分布式事务解决方案,能够处理跨多个请求的事务,适用于各种容器、语言和数据访问类型。在微服务架构下,依赖多个服务的操作可能导致分布式事务的问题。Seata 提供了完整的解决方案以确保数据的一致性和可靠性。
用户1289394
2023/09/11
2940
Seata如何处理跨多个请求的事务?
如何将多个参数传递给 React 中的 onChange?
在 React 中,一些 HTML 元素,比如 input 和 textarea,具有 onChange 事件。onChange 事件是一个非常有用、非常常见的事件,用于捕获输入框中的文本变化。有时候,我们需要将多个参数同时传递给 onChange 事件处理函数,在本文中,我们将介绍如何实现这一目标。
网络技术联盟站
2023/06/07
2.8K0
Logstash:处理多个 input
这里的 input 可以支持多个 input,同时多个 worker 可以处理 filter 及 output:
腾讯云大数据
2020/07/31
2.8K0
Logstash:处理多个 input
如何优雅地处理命令行参数?
我们在Linux用到的命令常常支持很多参数,那么如何写一个程序,也像Linux命令一样支持很多参数呢?有什么什么优雅的处理方法?
编程珠玑
2019/08/21
1.1K0
如何给PHP添加多个错误处理函数
一些常规的PHP框架都会对PHP的错误、异常进行异常处理封装,方便框架日志记录,开发的时候方便处理。我们先看看几个框架错误处理:
写PHP的老王
2019/08/12
1.9K0
如何给PHP添加多个错误处理函数
图像处理中C++如何同时返回多个值
1 . pair<T,T> 返回两个值 //返回两个值的情况 pair<vector<double>,int> R_R(Mat& img) { int n=img.rows; vector<double> a; unsigned int m=img.cols; unsigned int k=img.rows; for(unsigned int i=0;i<m;i++) { for(unsigned int j=0;j<k;j++)
用户9831583
2022/06/16
8000
mybatis 使用tips - 使用多个参数
执行如下命令: mvn -Dmybatis.generator.overwrite=true mybatis-generator:generate 可以使用mybatis generator mybatis 使用多个参数 自定义方法需要根据多个查询条件去查询: SELECT * FROM `db_demo`.`hot_topic` WHERE lang='english' AND category='017' AND topic_type='video' ORDER BY score DESC; 推荐使用
千往
2018/01/24
1.7K0
方法关键字WebMethod,参数关键字Abstract,Constraint,Deprecated
指定此方法是否为web method。仅适用于定义为web service或web客户端的类。
用户7741497
2022/07/07
4210
Swift 使用lexicographicallyprecedes 多个参数排序
版权声明:转载请标明出处 https://blog.csdn.net/ZY_FlyWay/article/details/89184264
星宇大前端
2019/04/18
1.2K0
Swift  使用lexicographicallyprecedes 多个参数排序

相似问题

如何解决ubuntu中unicode显示错误(不同)字符的问题?

10

需要哪种字体才能显示特定的Unicode字符?

10

WSL中缺少的字体

30

在bash提示符中更改unicode字符的字体大小

10

缺少Ubuntu字体

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文