我试图使用 python 解压缩 7z 文件,但我似乎无法弄清楚。我想我可以在 python 3 中使用 lzma 模块,但我似乎无法弄清楚:
我认为它会像 zipfile 包一样工作:
import lzma
with lzma.open('data.7z') as f:
f.extractall(r"<output path>")
Run Code Online (Sandbox Code Playgroud)
但在阅读文件后,似乎没有。所以这是我的问题:如何使用标准包提取 7z 文件?我不想调用 subprocess 来使用 7-zip 解压缩文件,因为我不能保证用户安装了这个软件。
我搜索了互联网和堆栈 oerflow 并注意到所有答案几乎都回到使用子处理上,我想像瘟疫一样避免这种情况。
虽然在 stackoverflow 上也有类似的问题,但答案仍然取决于 7-zip 或 7zip SDK。我不想使用 7-zip sdk/exe 进行提取,因为这假设用户已安装该软件。
这是 7z 文件中的属性:
我的代码conftest.py
如下:
def pytest_collection_modifyitems(config, items):
items.sort(key=lambda x: 2 if x.get_marker('slow') else 1)
Run Code Online (Sandbox Code Playgroud)
最近,它开始引起以下异常:
$ venv/bin/py.test -vv --tb=short tests
============================================================================ test session starts ============================================================================
platform darwin -- Python 3.5.6, pytest-4.1.1, py-1.7.0, pluggy-0.8.1 -- /Users/.../venv/bin/python3.5
cachedir: .pytest_cache
rootdir: /Users/..., inifile:
collecting ... INTERNALERROR> Traceback (most recent call last):
INTERNALERROR> File "/Users/.../venv/lib/python3.5/site-packages/_pytest/main.py", line 203, in wrap_session
...
INTERNALERROR> File "/Users/.../venv/lib/python3.5/site-packages/pluggy/callers.py", line 187, in _multicall
INTERNALERROR> res = hook_impl.function(*args)
INTERNALERROR> File "/Users/.../tests/conftest.py", line 14, in pytest_collection_modifyitems
INTERNALERROR> items.sort(key=lambda x: 2 if x.get_marker('slow') else …
Run Code Online (Sandbox Code Playgroud) 如何获取包含环境变量导出的 bash 脚本?
env.sh
...
export VARIABLE=test
...
Run Code Online (Sandbox Code Playgroud)
test_file.py
...
os.environ['VARIABLE'] # Throws KeyError
...
Run Code Online (Sandbox Code Playgroud)
如何使用预提交运行env.sh
来设置以下pytest
钩子可以使用的环境?
- repo: local
hooks:
- id: tests
name: run tests
entry: pytest -v
language: system
types: [python]
Run Code Online (Sandbox Code Playgroud) 我在 Python 中使用包 pydantic 和链接器 Flake8。我想将来自 pydantic 的 constr 与常规 Experssion 一起使用。只应传递某些字符。(az、AZ、0-9 和 _)
常规"^[a-zA-Z0-9_]*$"
Experssion 有效,但 flake8 向我显示以下错误:
前向注释中的语法错误 '^[a-zA-Z0-9_]*$' flake8(F722)
class RedisSettings(BaseModel):
keyInput: constr(regex="^[a-zA-Z0-9_]*$") = ""
keyOutput: constr(regex="^[a-zA-Z0-9_]*$") = ""
Run Code Online (Sandbox Code Playgroud)
你能帮我避免错误信息吗?
我在预提交和黑色方面遇到了麻烦。
一切工作正常,直到我用 清除缓存pre-commit clean
。现在我总是收到错误
该挂钩
black
需要预提交版本 2.9.2,但已安装版本 2.6.0。也许运行`pip install --upgrade pre-commit
如果我检查我的版本,我正在运行最新的预提交版本 (v2.12.1)。另外,如果我运行推荐的命令,则不会发生任何变化,并且会出现相同的错误。如果我停用black
挂钩,错误就会消失,所以我至少知道这是黑色的问题。
我尝试将黑色版本更改为stable
最新版本,但没有任何帮助。
我有什么想法可以解决这个问题吗?
我的预提交配置:
- repo: https://github.com/ambv/black
rev: stable
hooks:
- id: black
language_version: python3.8
exclude: |
(?x)(
migrations/|
config/|
_build/|
buck-out/|
build/|
dist/
)
Run Code Online (Sandbox Code Playgroud)
非常感谢帮助
我们使用预提交来使用黑色格式化我们的 Python 代码,并在以下配置中进行配置.pre-commit-config.yaml
:
repos:\n - repo: https://github.com/ambv/black\n rev: 20.8b1\n hooks:\n - id: black\n language_version: python3.7\n
Run Code Online (Sandbox Code Playgroud)\n由于我们的包在不同的 Python 版本(例如,,3.7
)中进行测试和使用,我希望能够在不同的 Python 版本上使用预提交 Hook。但是,当在 Python 上提交代码时,由于我的配置(见上文),我收到错误:3.8
3.9
3.8
language_version
C:\\Users\\FooBar\\Documents\\Programmierung\\foo (dev -> origin)\n\xce\xbb git commit -m "Black file with correct black version"\n[INFO] Initializing environment for https://github.com/ambv/black.\n[INFO] Installing environment for https://github.com/ambv/black.\n[INFO] Once installed this environment will be reused.\n[INFO] This may take a few minutes...\nAn unexpected error has occurred: CalledProcessError: command: (\'c:\\\\users\\\\FooBar\\\\anaconda\\\\python.exe\', \'-mvirtualenv\', …
Run Code Online (Sandbox Code Playgroud) 我将此添加到pre-commit-config.yml
- repo: local
hooks:
- id: python-hook
name: python-hook
entry: python python_script.py
language: python
pass_filenames: false
Run Code Online (Sandbox Code Playgroud)
哪里python_script.py
有以下内容
#!/usr/bin/env python
import os
print(os.environ["VIRTUAL_ENV"])
import requests
Run Code Online (Sandbox Code Playgroud)
该软件包requests
安装在活动虚拟环境中,当我运行预提交时,我得到以下输出
/path/to/home/.cache/pre-commit/repouecs3sp4/py_env-python3.7
Traceback (most recent call last):
File "python_script.py", line 7, in <module>
import requests
ModuleNotFoundError: No module named 'requests'
Run Code Online (Sandbox Code Playgroud)
这里的问题是虚拟环境的路径显然被切换到了不同的路径/path/to/home/.cache/pre-commit/repouecs3sp4/py_env-python3.7
。
我在这里缺少什么吗?感谢您的帮助
我在大多数 Python 项目中使用预提交,并且在其中许多项目中,我需要使用 pylint 作为本地存储库。当我想要提交时,我总是必须激活 python venv 然后提交;否则,我会收到以下错误:
black....................................................................Passed
pylint...................................................................Failed
- hook id: pylint
- exit code: 1
Executable `pylint` not found
Run Code Online (Sandbox Code Playgroud)
当我使用vscode版本控制提交时,我得到同样的错误;我搜索了这个问题,但没有找到任何解决方案来避免 VSCode 中的错误。
这是我的典型.pre-commit-config.yaml
:
repos:
- repo: https://github.com/ambv/black
rev: 21.9b0
hooks:
- id: black
language_version: python3.8
exclude: admin_web/urls\.py
- repo: local
hooks:
- id: pylint
name: pylint
entry: pylint
language: python
types: [python]
args:
- --rcfile=.pylintrc
Run Code Online (Sandbox Code Playgroud) python pre-commit pre-commit-hook visual-studio-code pre-commit.com
sudo pip3.4 install gdal
从终端(Mac OS X Mavericks)运行后,我收到一条错误消息,指出'col_port.h'
未找到该文件并显示以下错误:(command '/user/bin/clang/ failed with exit status 1
完整消息如下)。
我有 gdal 1.11(从 kingchaos.com 下载的完整框架版本)和最新版本的 Xcode 命令行工具 -Apple LLVM version 5.1 (clang-503.0.40)(基于 LLVM 3.4svn)
这是我运行sudo pip3.4 install gdal
命令后得到的错误:
/usr/bin/clang -fno-strict-aliasing -Werror=declaration-after-statement -fno-common -dynamic -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -arch i386 -arch x86_64 -g -I../../port -I../../gcore -I../../alg -I../../ogr/ -I/Library/Frameworks/Python.framework/Versions/3.4/include/python3.4m -I/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/numpy/core/include -I/Library/Frameworks/GDAL.framework/Versions/1.11/include -c extensions/gdal_wrap.cpp -o build/temp.macosx-10.6-intel-3.4/extensions/gdal_wrap.o
extensions/gdal_wrap.cpp:2230:11: warning: explicitly assigning a variable of type 'int' to itself [-Wself-assign]
res = SWIG_AddCast(res); …
Run Code Online (Sandbox Code Playgroud) 我知道夹具可以使用其他夹具,但是钩子可以使用夹具吗?我在网上搜索了很多,但没有得到任何帮助。如果我在这里做错了,有人可以指出吗?
#conftest.py
@pytest.fixture()
def json_loader(request):
"""Loads the data from given JSON file"""
def _loader(filename):
import json
with open(filename, 'r') as f:
data = json.load(f)
return data
return _loader
def pytest_runtest_setup(item,json_loader): #hook fails to use json_loader
data = json_loader("some_file.json")
print(data)
#do something useful here with data
Run Code Online (Sandbox Code Playgroud)
运行时出现以下错误。
pluggy.manager.PluginValidationError: 插件 'C:\some_path\conftest.py' for hook 'pytest_runtest_setup' hookimpl 定义:pytest_runtest_setup(item, json_loader) Argument(s) {'json_loader'} 在 hookimpl 中声明但找不到在钩子规范中
即使我没有将 json_loader 作为 arg 传递给 pytest_runtest_setup(),我也会收到一条错误消息,指出“Fixture“json_loader”被直接调用。Fixtures 并不意味着被直接调用”
python ×7
pre-commit ×4
git ×3
pytest ×3
python-3.x ×3
7zip ×1
clang ×1
flake8 ×1
gdal ×1
lzma ×1
pydantic ×1
python-3.4 ×1