我正在使用Python 3的pathlib模块,如下所示:
from pathlib import Path
filename = Path(__file__).parent / "example.txt"
contents = open(filename, "r").read()
Run Code Online (Sandbox Code Playgroud)
但我在某些机器上遇到此错误:
TypeError: invalid file: PosixPath('example.txt')
Run Code Online (Sandbox Code Playgroud)
但是在我的机器上它可以工作.
我有一点问题.我们有自己的CMS,它使用git进行协作和版本控制.
现在我有两个git存储库A和B,A是一个项目,B是CMS本身.现在我想让B进入A,但是当我这样做时,我得到了很多合并冲突,冲突的解决方案总是使用来自B的东西.
现在我认为我需要的是
git merge <branch> -s recursive theirs <commit>
Run Code Online (Sandbox Code Playgroud)
因为我想合并,当存在合并冲突时,应该强制使用B中的解决方案.但是我无法让它工作.它一直在告诉我fatal: 'theirs' does not point to a commit.
在recursive theirs我发现在这里.
有谁知道我做错了什么?
在正则表达式替换模式中,反向引用看起来像\1.如果要在该反向引用后包含一个数字,这将失败,因为该数字被认为是反向引用号的一部分:
# replace all twin digits by zeroes, but retain white space in between
re.sub(r"\d(\s*)\d", r"0\10", "0 1")
>>> sre_constants.error: invalid group reference
Run Code Online (Sandbox Code Playgroud)
替换模式r"0\1 0"可以正常工作,但在失败的示例中,反向引用\1被解释为\10.
如何将数字'0'与\1之前的反向引用分开?
是否可以使用python模拟模块unittest.mock?我有一个名为的模块config,在运行测试时我想用另一个模块来模拟它test_config.我怎样才能做到这一点 ?谢谢.
config.py:
CONF_VAR1 = "VAR1"
CONF_VAR2 = "VAR2"
Run Code Online (Sandbox Code Playgroud)
test_config.py:
CONF_VAR1 = "test_VAR1"
CONF_VAR2 = "test_VAR2"
Run Code Online (Sandbox Code Playgroud)
所有其他模块从模块读取配置变量config.在运行测试时,我希望他们从test_config模块中读取配置变量.
我是unittest代码,其中包含一个执行本地导入的方法.
def function_under_test():
import unknown.dependency
Run Code Online (Sandbox Code Playgroud)
(我没有在.py文件顶部使用导入,因为调用该函数时它可能存在也可能不存在.)
unknown.dependency以通常的方式进行模拟只有在某处可以找到它时才有效sys.path.否则,调用patch失败(它拒绝模拟它无法看到的东西):
with mock.patch('unknown.dependency'):
function_under_test()
>>> ImportError: No module named 'unknown'
Run Code Online (Sandbox Code Playgroud)
文档建议我应该修补使用模块的命名空间 - 在这种情况下,function_under_test.但是,当该命名空间是一个函数时,这不会削减它.调用patch成功,但实际的import语句仍然引用原始的,不存在的unknown模块,该模块无法找到.
with mock.patch('method_under_test.unknown'):
print("fails")
>>> ImportError: No module named 'unknown'
Run Code Online (Sandbox Code Playgroud)
那么,如果模块本身不存在并且从函数导入,如何用模拟替换依赖模块呢?
我将如何使用bump2version(关于它的调用和/或它的配置)来增加:
1.0.0.a2.post0 # post-release of a pre-release a2
Run Code Online (Sandbox Code Playgroud)
到
1.0.0.a3 # pre-release a3
Run Code Online (Sandbox Code Playgroud)
可重现的例子:
1.0.0.a2.post0 # post-release of a pre-release a2
Run Code Online (Sandbox Code Playgroud)
__init__.py:
1.0.0.a3 # pre-release a3
Run Code Online (Sandbox Code Playgroud)
setup.cfg:
[bumpversion]
current_version = 1.0.0.a2.post0
parse = ^
(?P<major>\d+)\.(?P<minor>\d+)\.(?P<patch>\d+) # minimum major.minor.patch, 1.2.3
(?:
\.
(?P<prerel>a|alpha|b|beta|d|dev|rc) # pre-release segment
(?P<prerelversion>\d+) # pre-release version num
)?
(?:\.post(?P<post>\d+))? # post-release
serialize =
{major}.{minor}.{patch}.{prerel}{prerelversion}.post{post}
{major}.{minor}.{patch}.{prerel}{prerelversion}
{major}.{minor}.{patch}.post{post}
{major}.{minor}.{patch}
[bumpversion:file:__init__.py]
[bumpversion:part:prerel]
optional_value = dev
values =
dev
d
alpha
a
beta
b
rc
Run Code Online (Sandbox Code Playgroud)
此方案的有效版本示例,它采用了 PEP …
我们使用bump2version来对Gitlab中的构建和发布进行版本控制,使用简单的major.minor.patch(1.1.17)格式。
然而,有时,使用自定义版本格式(例如 1.1.17-test-1)在常规管道之外创建版本很有用。
在当前版本 1.1.17 上尝试使用如下所示的 bubble2versions 命令行标志:
bump2version.exe --search 1.0.17 --replace 1.0.17-testing --verbose --new-version 1.0.17-test-1 part
Run Code Online (Sandbox Code Playgroud)
不要给出任何错误,但会在管理版本字符串的所有文件中产生错误的版本字符串。
.bumpversion.cfg 文件如下所示:
[bumpversion]
current_version = 1.0.17
[bumpversion:file:CMakeLists.txt]
search = MVR_VERSION "{current_version}"
replace = MVR_VERSION "{new_version}"
[bumpversion:file:VERSION.txt]
search = {current_version}
replace = {new_version}
[bumpversion:file:installer/mvr.iss]
search = #define MyAppVersion "{current_version}"
replace = #define MyAppVersion "{new_version}"
Run Code Online (Sandbox Code Playgroud)
在应该更改版本字符串的每个文件中,更改如下所示:
set(MVR_VERSION "MVR_VERSION "1.0.17"" )
Run Code Online (Sandbox Code Playgroud)
这是不对的。正确的搜索/替换是
set(MVR_VERSION "1.0.17-test-1" )
Run Code Online (Sandbox Code Playgroud)
关于如何使用凹凸2版本标志来实现自定义版本有任何提示吗?
在 Windows 7 x64 上使用 Python 3.6,该路径"C:"似乎与以下内容的空路径相同Path.resolve():
“空”路径是“当前工作目录” cwd():
>>> from pathlib import Path
>>> Path().resolve()
WindowsPath('C:/Users/me')
>>> Path(r"").resolve()
WindowsPath('C:/Users/me')
>>> Path.cwd().resolve()
WindowsPath('C:/Users/me')
Run Code Online (Sandbox Code Playgroud)
单个字母被解释为文件夹名称:
>>> Path(r"C").resolve()
WindowsPath('C:/Users/me/C')
Run Code Online (Sandbox Code Playgroud)
完整的驱动器号+冒号+反斜杠按预期指向驱动器根:
>>>> Path(r"C:\").resolve()
WindowsPath('C:/')
Run Code Online (Sandbox Code Playgroud)
但是忘记了反斜杠指向当前工作目录?
>>>> Path(r"C:").resolve()
WindowsPath('C:/Users/me/C')
Run Code Online (Sandbox Code Playgroud)
我希望它要么将冒号(不带反斜杠)视为常规字符(对于Path("te:st")),要么忽略它("C"),要么将路径视为驱动器根("C:\")。但相反,它似乎完全忽略了 C。
对于其他驱动器号("A:"、"X:"、...),解析要么无限期挂起(不好!),要么要求我将磁盘插入驱动器(这表明它也没有完全忽略驱动器号)。
说,我有两个列表a和b:
a = [10, 20]
b = [40, 50]
Run Code Online (Sandbox Code Playgroud)
我想一次遍历所有这些值(10, 20, 40, 50).
简单地做两个循环不是我想要的(重复是丑陋的).
我也不想修改其中一个列表:
a.extend(b)
for i in a:
print(i)
Run Code Online (Sandbox Code Playgroud)
那么我如何在Python中这么做呢?
python ×8
bump2version ×2
mocking ×2
pathlib ×2
python-3.x ×2
git ×1
loops ×1
merge ×1
regex ×1
versioning ×1