小编Yoa*_*ein的帖子

如何使用setuptools_scm?

我不太明白如何使用setuptools-scm

据我了解,这个工具应该根据 SCM(在我的例子中是 git)历史记录得出版本号。它基本上使用距最新标签的距离来获取此信息。

现在,假设我有一个项目,我们在其中工作:我们有maindevelop分支。我们使用 SemVer,因此我们有一个x.y.z版本模式。现在,每当我们提交时develop,我们都希望在我们的包注册表中拥有最新的包。因此,如果主分支上的最新版本是1.2.3例如,我们希望获得1.2.3.dev11.2.3.dev2等。

我实际看到发生的情况是,如果我有1.2.3最新的标签,setuptools-scm 会将下一个版本定义为1.2.4,另外,它会在版本中添加+g532hj..,而注册表等注册表PyPI Test不接受该版本。

有人能具体解释一下它是如何使用的吗?

python pip python-packaging

12
推荐指数
1
解决办法
4822
查看次数

CMake add_executable 应该包含头文件吗?

我对 CMake 还很陌生,我的问题是:

假设我们有一个简单的项目,只有

main.cpp
Run Code Online (Sandbox Code Playgroud)

使用

header.h
Run Code Online (Sandbox Code Playgroud)

我想使用 CMake 构建这个项目,所以我有一个最小的
CMakeLists.txt,其中仅包含以下内容(仅包含相关内容):

add_executable(MyApp main.cpp)
Run Code Online (Sandbox Code Playgroud)

是否有理由将 包含header.h在 中CMakeLists.txt

据我所见,如果我修改并再次header.h运行, 它会按预期更新。cmake

c++ header cmake include

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

关于 Powershell 中的作用域

我正在学习 Powershell 中的范围并且有一些问题:

  1. 关于“本地范围”:从我读到的内容来看,本地范围始终是当前范围。所以,默认情况下,当我们创建一个项目(没有范围修饰符),例如一个变量,在某个范围内,让它是脚本或全局,范围将相应地是脚本/全局。所以我的问题是:我们什么时候需要明确指定local修饰符?
  2. MSDN 说:

您可以通过运行脚本或函数、创建会话或启动 PowerShell 的新实例来创建新范围。创建新作用域时,结果是父作用域(原始作用域)和子作用域(您创建的作用域)。...
除非您明确将项目设为私有,否则父范围中的项目可用于子范围。但是,您在子作用域中创建和更改的项不会影响父作用域,除非您在创建项时明确指定作用域。

但是当我尝试以下操作时:

PS> $Name = "John"
PS> Powershell.exe
PS>echo $Name  // No Output
Run Code Online (Sandbox Code Playgroud)

从上面的引用看来,“启动一个新的 powershell 实例”是一个子作用域,所以父作用域中的所有项目都应该在那里可见。有人可以解释一下吗?

.net variables powershell scope

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

在 Docker 容器中运行 sshd

在这里Dockerfile找到了这个样本:

// version 1
FROM ubuntu:latest
RUN apt update && apt install ssh  -y
RUN service ssh start
CMD ["/usr/sbin/sshd","-D"]
Run Code Online (Sandbox Code Playgroud)

当我构建并运行它时Dockerfile,它在前台运行一个 SSH 服务器,这很棒。

如果我使用以下内容Dockerfile

// version 2
FROM ubuntu:latest
RUN apt update && apt install ssh -y
RUN service ssh start
# CMD ["/usr/sbin/sshd","-D"] // without this line

Run Code Online (Sandbox Code Playgroud)

然后运行容器:

~$ docker run -p 2222:22 -it ssh_server
Run Code Online (Sandbox Code Playgroud)

并尝试从另一个终端连接它,它不起作用。看来对 sshd 的调用是必要的。另一方面,如果我只是在 Dockerfile 中安装 SSH:

// version 3
FROM ubuntu:latest
RUN apt-get update && apt-get install …
Run Code Online (Sandbox Code Playgroud)

linux ssh docker

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

编译时间与运行时 Azure Pipelines

当我了解天蓝色管道时,我几乎到处都会
遇到术语“编译时”和“运行时”。
但是,我仍然没有找到关于它们的明确解释。

我在微软的文档中找到了这个页面,但它并没有非常清楚地解释这些术语。


如果有人可以在Azure Pipelines 的整个运行顺序的上下文中解释这些术语,我会很高兴。

谢谢!

azure devops azure-devops

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

Jenkins 共享库中的“vars”如何工作?

我在 Jenkins 共享库中遇到了一些行为,如果有人可以向我解释这一点,那就太好了:

首要问题

假设我的vars目录中有一个文件:

// MultiMethod.groovy

def Foo() { ... }

def Bar() { ... }
Run Code Online (Sandbox Code Playgroud)

现在,如果我想使用管道中的这些函数,我所做的是:

// Jenkinsfile
@Library('LibName') _

pipeline {
  ...
  steps {
    script { 
        // Method (1): this will work
        def var = new MultiMethod()
        var.Foo()
        var.Bar()

        // Method (2) this will not work
          MultiMethod.Foo()
       }
  }

}
Run Code Online (Sandbox Code Playgroud)

((1)和(2)方法是调用groovy脚本中方法的方法。请不要被这两种“方法”一词的用法所混淆。)

MultiMethod所以只有当我用运算符实例化它时它才有效new

但是,如果我将文件命名为multiMethod(camelCased) 而不是MultiMethod,我可以使用方法 (2) 来调用脚本中的方法。有人可以解释这种行为吗?

这似乎运作良好。

第二期

基于上面的例子。如果我有一个名为 的常规文件MultiMethod(我们之前看到,如果我用 with 实例化,我可以使用它的方法new),我似乎无法MultiMethod在动态加载库时实例化一个对象,如下所示: …

jenkins jenkins-pipeline jenkins-shared-libraries

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

什么是在 Git 中标记不是提交的对象?

git tag 文档说你可以标记提交或对象:

<commit>
<object>
新标记将引用的对象,通常是提交。默认为 HEAD。

事实上,您可以获取 blob 对象的哈希值并对其进行标记。但我不明白——它有什么用?你可以用这个标签做什么?

git

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

我如何知道哪些 Python 版本可以运行我的代码?

我在一些地方读到过,一般来说,Python 不提供向后兼容性,这意味着任何较新版本的 Python 都可能会破坏在早期版本中运行良好的代码。如果是这样,作为开发人员,我如何知道哪些版本的 Python 可以成功执行我的代码?对此有什么规则/保证吗?或者我应该告诉我的用户:只需使用 Python 3.8(例如)运行它 - 不多也不少......?

python

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

Synchronize-With 关系到底是什么?

我一直在阅读Jeff Preshing 的这篇关于 Synchronizes-With Relation 的文章,以及cpp 参考中的std::memory_order页面中的“Release-Acquire Ordering”部分,但我不太明白:

似乎标准有某种承诺,但我不明白为什么有必要。让我们以 CPP 参考中的示例为例:

#include <thread>
#include <atomic>
#include <cassert>
#include <string>
 
std::atomic<std::string*> ptr;
int data;
 
void producer()
{
    std::string* p  = new std::string("Hello");
    data = 42;
    ptr.store(p, std::memory_order_release);
}
 
void consumer()
{
    std::string* p2;
    while (!(p2 = ptr.load(std::memory_order_acquire)))
        ;
    assert(*p2 == "Hello"); // never fires
    assert(data == 42); // never fires
}
 
int main()
{
    std::thread t1(producer);
    std::thread t2(consumer);
    t1.join(); t2.join();
}
Run Code Online (Sandbox Code Playgroud)

参考文献解释说:

如果线程 A 中的原子存储标记为 memory_order_release,并且线程 B …

c++ multithreading memory-model memory-barriers stdatomic

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

Powershell CommandNotFoundException 正在终止?

执行这样的脚本时:

nonexistingcommand
echo "Hello"
Run Code Online (Sandbox Code Playgroud)

我得到:

nonexistingcommand : The term 'nonexistingcommand' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the 
name, or if a path was included, verify that the path is correct and try again.
At D:\Playground\powershell\Test.ps1:2 char:1
+ nonexistingcommand
+ ~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (nonexistingcommand:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException
 
Hello

Run Code Online (Sandbox Code Playgroud)

所以看起来这CommandNotFoundException是一个非终止错误。那么为什么如果我

try {
 nonexistingcommand
}
catch [System.Management.Automation.CommandNotFoundException] {
  throw
}
echo "Hello"
Run Code Online (Sandbox Code Playgroud)

在这种情况下,它将退出并且不打印“Hello”。 …

powershell

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

Powershell数组的ForEach不返回System.array?

我注意到,当ForEach在数组对象上运行并将输出捕获到新变量时,新变量不是 System.array 类型:

PS D:\Playground> $Arr = 1, 2, 3
PS D:\Playground> $Arr2 = $Arr.ForEach({$_})
PS D:\Playground> $Arr2.Gettype()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     Collection`1                             System.Object

Run Code Online (Sandbox Code Playgroud)

相反,它是 类型Collection'1

这是什么类型?它相当于数组吗?

顺便说一句,这与以下内容不同ForEach-Object

PS D:\Playground> $Arr3 = $($Arr | ForEach-Object { $_ })
PS D:\Playground> $Arr3.GetType()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     Object[]                                 System.Array
Run Code Online (Sandbox Code Playgroud)

powershell

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

如何以编程方式检测本地和远程分支是否不同?

我有一个主分支,我想要一个脚本来检测远程主分支是否已更新。我知道我可以这样做:

git fetch
Run Code Online (Sandbox Code Playgroud)

现在当我跑步时

git diff master origin/master
Run Code Online (Sandbox Code Playgroud)

我得到输入。

问题是,在脚本中检测这一点的最佳方法是分析文本输出吗?感觉不太稳定..有什么想法吗?

git

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

如何在 Bash 内置命令的测试中使用括号

在 Bash 参考手册第 4.1 章中,关于测试命令的部分:

可以使用以下运算符组合表达式,按优先级降序列出。评估取决于参数的数量;见下文。当有五个或更多参数时,使用运算符优先级。

!expr 如果 expr 为假则为真。

( expr ) 返回 expr 的值。这可用于覆盖运算符的正常优先级。
...

由此看来,人们可以做类似的事情:

if [ 3 == 2 -a (2 == 2 -o 2 == 2) ];
Run Code Online (Sandbox Code Playgroud)

在这种情况下,括号 () 将覆盖正常优先级(首先是 -a,在这种情况下整个表达式将为 true),但是当我尝试运行它时,我得到:

/test.sh: line 3: syntax error near unexpected token `('
./test.sh: line 3: `if [ 3 == 2 -a (2 == 2 -o 2 == 2) ];'

Run Code Online (Sandbox Code Playgroud)

bash

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