小编Mat*_*att的帖子

如何在 pipenv / pyenv 中使用 pyinstaller

我正在尝试从我的 python 脚本中发送一个可执行文件,该脚本位于使用 pipenv 的虚拟环境中,它再次依赖 pyenv 进行 python 版本控制。为此,我想要我们 pyinstaller。

我做了什么:

pipenv install pyinstaller 
pyinstaller --onefile my_script.py
Run Code Online (Sandbox Code Playgroud)

输出:

40 INFO: PyInstaller: 3.5
40 INFO: Python: 3.6.9
41 INFO: Platform: Linux-4.15.0-65-generic-x86_64-with-debian-stretch-sid
42 INFO: wrote /home/matthaeus/cybathlon/planvec/qt_video_gui_example.spec
44 INFO: UPX is not available.
45 INFO: Extending PYTHONPATH with paths
['/home/matthaeus/cybathlon/planvec', '/home/matthaeus/cybathlon/planvec']
45 INFO: checking Analysis
45 INFO: Building Analysis because Analysis-00.toc is non existent
45 INFO: Initializing module dependency graph...
46 INFO: Initializing module graph hooks...
47 INFO: Analyzing base_library.zip ...
2786 INFO: …
Run Code Online (Sandbox Code Playgroud)

python pyinstaller python-3.x pyenv pipenv

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

Python 日志记录终止

问题

处理我想将异常记录到控制台、文件等然后终止程序的情况的最佳方法是什么?假设我读入配置并验证给出的条目是否有意义。如果没有,我想引发 InvalidConfigError,记录此错误并终止,因为无法从中恢复。

我做了什么

try:
    config = validate_config(read_config(cfg_file_path))
except InvalidConfigError:
    logging.getLogger(__name__).exception(f'Config validation failed.')
    exit(1)
Run Code Online (Sandbox Code Playgroud)

想法

当我这样做时(注意raise

try:
    config = validate_config(read_config(cfg_file_path))
except InvalidConfigError:
    logging.getLogger(__name__).exception(f'Config validation failed.')
    raise
Run Code Online (Sandbox Code Playgroud)

由于我记录了整个事件(包括),因此我将在控制台日志中获得重复的回溯。我的异常日志记录调用中的回溯,然后再次引发它,这将再次打印整个内容。

有一个更好的方法吗?我觉得 exit(1) 不是特别好。

我的日志记录配置

version: 1
disable_existing_loggers: False
formatters:
  simple:
    format: "%(asctime)s : %(name)-12s : %(levelname)-10s %(message)s"

handlers:
  console:
    class: logging.StreamHandler
    level: DEBUG
    formatter: simple
    stream: ext://sys.stdout

  info_file_handler:
    class: logging.handlers.RotatingFileHandler
    level: INFO
    formatter: simple
    filename: data/logs/info.log
    maxBytes: 10485760 # 10MB
    backupCount: 5
    encoding: utf8

  error_file_handler:
    class: logging.handlers.RotatingFileHandler
    level: ERROR
    formatter: simple …
Run Code Online (Sandbox Code Playgroud)

python logging exception raise

5
推荐指数
0
解决办法
789
查看次数

为什么在函数声明中传递const指针参数无效

问题描述

我有一个函数,它接受一个指向const double数组的const指针,在该数组上我使用大小作为my_func内的边界检查进行循环。

在.h中声明

void my_func(const double * const my_array, size_t size);
Run Code Online (Sandbox Code Playgroud)

在.c中实现

void my_func(const double * const my_array, size_t size) {
  for (size_t idx = 0; idx < size; idx++) {
    do_something_with(my_array[idx]);
  }
}
Run Code Online (Sandbox Code Playgroud)

我不希望在函数内部更改指针,从而使其成为现实* const。我不希望它指向的数据被更改,因此const double

但是Clang-Tidy希望我让函数声明将const放到指针上,使其变为

void my_func(const double * my_array, size_t size);
Run Code Online (Sandbox Code Playgroud)

Clang-Tidy:参数'my_array'在函数声明中是const限定的;参数的const限定仅在函数定义中起作用

如果我遵循该建议,但又希望保持上面的约束,那么我的函数声明和定义将不再相同。

问题

1)
假设我的指针参数不是const(const double * pointer_arg),如果我pointer_arg在函数内部进行更改以指向另一个const double,则该更改在函数外部是否可见?也就是说,在执行完我的函数的那一行之后,填充pointer_arg指向何处?如果看不见,是否表示指针已按值复制?这有可能吗?

2)
声明声明中的const无效的决定背后的原因是什么?

3)
在声明和定义中使用不同的函数签名可能会有什么好处?对我来说,看我的头文件还不清楚实现的工作原理,函数内部是否为const,不是吗?这让我或代码合作者感到困惑。

4)
我应该在声明中删除const吗?什么是最好的做法,在这种情况下?

c pointers arguments

0
推荐指数
1
解决办法
232
查看次数

标签 统计

python ×2

arguments ×1

c ×1

exception ×1

logging ×1

pipenv ×1

pointers ×1

pyenv ×1

pyinstaller ×1

python-3.x ×1

raise ×1