小编Arn*_*rah的帖子

如何使用 setuptools 将 Python 标记添加到 bdist_wheel 命令?

假设我有一个简单的库,它使用setuptools进行打包和分发。在这种情况下,库还需要最低版本的 Python 3.6,这意味着我的 setup.py 将如下所示:

from setuptools import setup, find_packages

setup(
    name='something',
    version='0.0.1',

    description='description',
    long_description=long_description,

    # More metadata

    packages=find_packages(exclude=['tests', 'docs']),

    python_requires='>=3.6'
)
Run Code Online (Sandbox Code Playgroud)

现在,当我运行时python setup.py bdist_wheel,我得到一个名为something-0.0.1-py3-none-any.whl. 在这里很明显,python_requiressetuptools确定我的轮子的 Python 标签时,wheel 忽略了选项(它应该是py36但默认的py3)。显然,我意识到我可以--python-tag py36从命令行传入,这将完成这项工作,但是我用于部署我的库的持续部署服务只接受我正在使用的发行版的名称 ( bdist_wheel)。因此,我无法传递任何命令行参数。

经过一番研究,我发现我可以从bdist_wheel类继承并覆盖python_tag成员变量,但是根据wheel README:

应该注意的是,wheel打算用作库,因此没有稳定的公共 API。

因此,我想避免从bdist_wheel类继承,这可能会迫使我在每次发生重大更改时重写我的类。

有没有其他方法可以通过 setuptools 传递轮子的 Python 标签?

python setuptools continuous-deployment python-wheel

6
推荐指数
1
解决办法
2783
查看次数

如何计算递归函数中的案例数?

def calcPath(trace_map, x, y):
    n = len(trace_map)
    count = 0
    if x > n - 1 or y > n - 1:
        pass
    elif x < n and y < n:
        if x + trace_map[x][y] == (n - 1) and y == (n - 1):
            count += 1
        elif x == (n - 1) and y + trace_map[x][y] == (n - 1):
            count += 1
        else:
            calcPath(trace_map, x + trace_map[x][y], y)
            calcPath(trace_map, x, y + trace_map[x][y])
    return count


if __name__ …
Run Code Online (Sandbox Code Playgroud)

python recursion counter if-statement counting

6
推荐指数
1
解决办法
297
查看次数

我应该删除作为参数传递给函数的指针吗?

所以,我在读有关删除指针参数一些堆栈溢出的答案特别是这些的(1,2),因为我建立一个功能,需要一个指针作为参数.

该功能的简化版本如下:

void draw(Shape * b)
{
    //Draws code....
}
Run Code Online (Sandbox Code Playgroud)

不,我在这里感到困惑的是删除.例如,如果函数被调用如下:

Shape * c;
draw(&c);
Run Code Online (Sandbox Code Playgroud)

然后我不必删除任何东西.但如果它是这样的:

draw(new Shape{});
Run Code Online (Sandbox Code Playgroud)

然后我必须.所以基本上,我的问题是,如果在new参数中使用关键字,我应该如何删除.没有可能在函数中抛出的异常,因此不需要RAII.有任何想法吗?请不要提出任何涉及智能指针的内容,因为这是我已经做过的,这个问题就是好奇心.另外,请回答知道函数可以同时使用新运算符或现有指针,这基本上意味着我需要一种方法来区分两者.另外,对于我的链接:这些并没有真正回答我的问题,因为它们中的大多数只依赖于智能指针,或者一个呼叫或另一个.

c++ pointers new-operator delete-operator

5
推荐指数
2
解决办法
1387
查看次数

VSCode C++调试捕获控制台输出

我在Ubuntu中运行VSCode来调试C++程序.使用GDB调试控制台应用程序工作正常,但我真的想将控制台日志输出捕获到文件.我看不到这样做的方法或选择.有没有选项来捕获此控制台日志输出?

c++ visual-studio-code

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

如何将 CMake 生成器表达式拆分为多行?

假设我有如下代码:

target_compile_options(${PROJECT_NAME} 
    PRIVATE
        $<$<CXX_COMPILER_ID:MSVC>:...Options...>
        $<$<OR:$<CXX_COMPILER_ID:GNU>,$<CXX_COMPILER_ID:Clang>,$<CXX_COMPILER_ID:AppleClang>>:...Options...>
)
Run Code Online (Sandbox Code Playgroud)

很明显,第二行(检查编译器是 GCC、Clang 还是 AppleClang)很长。为了将其缩短为多行,我尝试了以下操作:

target_compile_options(${PROJECT_NAME} 
    PRIVATE
        $<$<CXX_COMPILER_ID:MSVC>:...Options...>
        $<$<OR:$<CXX_COMPILER_ID:GNU>,
            $<CXX_COMPILER_ID:Clang>,
            $<CXX_COMPILER_ID:AppleClang>>:...Options...>
)
Run Code Online (Sandbox Code Playgroud)

但是,在运行 CMake 时,我发现这不起作用。我收到以下错误:

CMake Error at CMakeLists.txt:23 (target_compile_options):
  Error evaluating generator expression:
    $<OR:$<CXX_COMPILER_ID:GNU>,;$<CXX_COMPILER_ID:Clang>,;$<CXX_COMPILER_ID:AppleClang>>
  Parameters to $<OR> must resolve to either '0' or '1'.
Run Code Online (Sandbox Code Playgroud)

很明显,CMake 没有意识到生成器表达式的下一部分在连续行上,而不是在同一行上。因为我想保持可读性,所以我不想诉诸第一个选项。我意识到我可以string(CONCAT ...)把结果放在一个变量中,但我想避免这种情况,因为我的整个项目中只有一个目标,这会使变量变得毫无用处。

如何将这样的生成器表达式拆分为多行以保持可读性?

cmake

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

在端口 8080 上使用 Webpack Dev Server 获取 ERR_CONNECTION_RESET

我正在按照官方webpack 教程来设置 webpack 开发服务器。这是我的 webpack 配置:

\n\n
const path = require(\'path\');\nconst HtmlWebpackPlugin = require(\'html-webpack-plugin\');\nconst { CleanWebpackPlugin } = require(\'clean-webpack-plugin\');\n\nmodule.exports = {\n  mode: \'development\',\n  entry: {\n    app: \'./src/index.js\',\n    print: \'./src/print.js\',\n  },\n  devtool: \'inline-source-map\',\n  devServer: {\n    contentBase: \'./dist\',\n    // port: 8081 // <-- uncommenting this line gets rid of the error\n  },\n  plugins: [\n    new CleanWebpackPlugin(),\n    new HtmlWebpackPlugin({\n      title: \'Output Management\',\n    })\n  ],\n  output: {\n    filename: \'[name].bundle.js\',\n    path: path.resolve(__dirname, \'dist\'),\n  },\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

然而,当我尝试运行服务器时,我遇到了一个奇怪的问题。代码根据 webpack 输出正确编译,但是当 URL 尝试在 Chrome/Safari 中打开时,我得到“This site …

javascript webpack webpack-dev-server

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

在模板类中声明的struct成员上,decltype失败

我遇到了代码无法为我正在使用的外部库编译的问题.我相信库用gcc编译得很好,但它无法用clang为我编译.

我可以重新创建如下问题

template <class T>
class A {
public:
    struct B {
        int a;
    };

    void test();

private:
    T _t;
};

template <class T>
void A<T>::test()
{
    printf("Result %d", std::numeric_limits<decltype(B::a)>::max());
}

int main(int argc, char** argv)
{
    auto t = A<int>();
    t.test();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这无法在clang上编译时出现以下错误

error: invalid use of non-static data member 'a' printf("Result %d", std::numeric_limits<decltype(B::a)>::max());
Run Code Online (Sandbox Code Playgroud)

我的问题如下:

  • 预期的行为是什么?

  • 在c ++ 11中添加了非静态成员的decltype.这适用于模板类中声明的那些吗?

  • 这是编译器错误吗?或者使用gcc的不符合代码的示例?

c++ gcc templates c++11 clang++

4
推荐指数
1
解决办法
315
查看次数

如何更改采用多个值的 clap 参数中的值的名称?

作为我的 CLI 工具的一部分,我有一个clap::Arg接受多个值的,代表一个(x, y)坐标。我希望使用能够将值作为-p/--position 1 0

.arg(
    clap::Arg::with_name("position")
        .help("The position for yada yada yada")
        .long("position")
        .short("p")
        .number_of_values(2)
        .validator(|p| match p.parse::<usize>() {
            Err(_) => Err(String::from("Error string")),
            Ok(_) => Ok(()),
        }
    )
)
Run Code Online (Sandbox Code Playgroud)

虽然这适用于我想要的界面,但这会产生一些令人困惑的帮助消息:

... Help text ...

OPTIONS:
    ... other options ...
    -p, --position <position> <position>    The position for yada yada yada
Run Code Online (Sandbox Code Playgroud)

这里困扰我的是-p, --position <position> <position>,它似乎表明两个位置被传递给参数。有什么办法可以用<position> <position>我选择的字符串替换吗?(我的目标是-p, --position <x> <y>在帮助消息中获得类似的信息。)

parameter-passing command-line-interface rust clap

4
推荐指数
1
解决办法
480
查看次数

函数的 C++ 可选 std::vector 参数

我在这里看到了一些答案,但它们可能不适用于这里。我有一个(成员)函数,它主要只与一个参数(第一个)一起使用:

const std::complex<double> Class::func(const std::complex<double> &x, \
                                       std::vector<double> &y = 0, \
                                       std::vector<double> &z = 0) const;
Run Code Online (Sandbox Code Playgroud)

我希望 fory并且z是可选的,甚至可能基于 type 的第四个参数string,类似于这样的:func( , , , const std::string &choice),但这只会让我只将一个参数传递给函数,而其他两个参数不会被使用。y例如,如果我确实通过了,它的声明必须在调用之前完成func(),对于 来说也是如此z,但我希望这是可选的,该函数在数学方面可能有点繁重,无需添加如果不需要,计算两个额外向量的负担。这可能吗?

c++ vector default-arguments

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

Python:在字符串中匹配自定义日期格式

我有一个像这样的字符串:

>>> string = "bla_bla-whatever_2018.02.09_11.34.09_more_bla-123"
Run Code Online (Sandbox Code Playgroud)

我需要从中提取日期2018.02.09_11.34.09.它将始终采用这种格式.

所以我尝试过:

>>> match = re.search(r'\d{4}\.\d{2}\.\d{2}_\d{2}\.\d{2}\.\d{2}', string)
Run Code Online (Sandbox Code Playgroud)

它正确地从该字符串中提取出日期:

>>> match.group()
'2018.02.09_11.34.09'
Run Code Online (Sandbox Code Playgroud)

但是当我尝试从这个字符串创建一个datetime对象时,它不起作用:

>>> datetime.datetime.strptime(match.group(), '%Y.%m.%d_%H.%I.%S')
ValueError: time data '2018.02.09_11.34.09' does not match format '%Y.%m.%d_%H.%I.%S'
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

python datetime date

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