小编Oli*_*ren的帖子

从文件加载的版本不符合 PEP 440

正如标题所述,当我python -m build使用版本文件在本地运行时,出现此错误。我已阅读PEP 440,对我来说,它似乎符合要求。我从setuptools 的文档中看不到为什么我会遇到这个问题

我真的很感激对此的一些帮助,因为我不知道如何运行调试器python -m build或进一步了解为什么_parse_versionofsetuptools/config.py对我的版本文件不满意。

更多细节:

我有一个项目结构如下:

src/
   mypackage/
      __init__.py
      VERSION
pyproject.toml
setup.cfg
setup.py

Run Code Online (Sandbox Code Playgroud)

版本

0.0.1
Run Code Online (Sandbox Code Playgroud)

安装程序.cfg

src/
   mypackage/
      __init__.py
      VERSION
pyproject.toml
setup.cfg
setup.py

Run Code Online (Sandbox Code Playgroud)

安装程序.py

0.0.1
Run Code Online (Sandbox Code Playgroud)

pyproject.toml

name = mypackage
version = file: src/mypackage/VERSION
# etc. etc. etc.
Run Code Online (Sandbox Code Playgroud)

有关错误的更多详细信息:

#!/usr/bin/env python
# Used to create editable installs
import setuptools

setuptools.setup()

Run Code Online (Sandbox Code Playgroud)

setuptools python-3.x

7
推荐指数
1
解决办法
3384
查看次数

如何重构使用argparse在另一个Python脚本中可调用的脚本?

我有一个脚本找到测试名称,并在我们公司广泛使用.它在命令行上运行,如下所示:

find_test.py --type <type> --name <testname>
Run Code Online (Sandbox Code Playgroud)

在脚本内部相当于:

import argparse

parser = argparse.ArgumentParser(description='Get Test Path')
parser.add_argument('--type',      dest='TYPE',      type=str,            default=None,  help="TYPE [REQUIRED]")
parser.add_argument('--name',      dest='test_name', type=str,            default=None,  help="Test Name (Slow)")
parser.add_argument('--id',        dest='test_id',   type=str,            default=None,  help="Test ID (Fast)")
parser.add_argument('--normalise', dest='normalise', action="store_true", default=False, help="Replace '/' with '.' in Test Name")
args = parser.parse_args()
Run Code Online (Sandbox Code Playgroud)

(不确定所有这些论点的作用,我个人只使用前两个).然后,这些行由使用这些参数的代码继续.

我想重构这个脚本,以便我可以将其作为模块导入,但也保留其命令行功能 - 因为很多人使用这个脚本,并且在我们的一些csh脚本中也调用它.

到目前为止我已经重构了它,就像这样:

def _main():
    <all the former code that was in find_test.py>

if __name__ == "__main__":
    _main()
Run Code Online (Sandbox Code Playgroud)

这仍然可以从命令行运行.但我不知道如何在我的父脚本中将相关开关的参数传递给它.

如何进一步重构,然后在父脚本中调用它?这可能吗?

我也不愿意使用我读过的docopts是新的argparse,除非必要 - 即不能用argparse完成,因为它没有在公司范围内安装,这可能是一个艰巨的过程.

python refactoring argparse

5
推荐指数
1
解决办法
165
查看次数

Pandas - 查找在每个班级组中显示的唯一值

我有一个 python 熊猫表,如下所示:

class  |     id
_____________________
  A      12311894945
  A      12311760566
  A      12311433981
  A      12299990440       
  A      12291758744
  B      12311894945
  B      12311760566
  B      12311433981
  B      12299990440       
  B      12291758744
  C      12299990440       
  C      12291758744    

Run Code Online (Sandbox Code Playgroud)

我想获得属于每个类组的唯一 id 值,以便预期结果如下:

[12299990440, 12291758744]
Run Code Online (Sandbox Code Playgroud)

我在想也许是一个 groupby 类和某种交叉,但我看不出这两个操作是如何在 Pandas 中一起完成的。

python-3.x pandas

3
推荐指数
1
解决办法
48
查看次数

用于在Python中匹配非空格的正则表达式

我想使用re.search来提取第一组非空白字符.我有以下伪文本重新创建我的问题:

#!/usr/bin/env python2.7
import re

line = "STARC-1.1.1.5             ConsCase    WARNING    Warning"
m = re.search('^[^\S]*?',line)
if m:
    print m.group(0)
Run Code Online (Sandbox Code Playgroud)

它似乎是打印空白而不是STARC-1.1.1.5

据我了解,这个正则表达式是这样的: 在行的开头,找到一组非空白字符,不要贪心

我很确定这会工作,文档说我可以使用/ S来匹配[]中的空格,所以我不确定问题出在哪里.

现在,我知道,我知道这可能看起来很奇怪,为什么我不使用其他功能来做到这一点?好吧,有不止一种方法可以给猫皮肤,我仍然在Python中使用正则表达式,因此我想知道如何使用re.search以这种方式提取这个字段.

python regex whitespace python-2.7

2
推荐指数
2
解决办法
1万
查看次数