在Python打包的上下文中,似乎Pipfile/Pipfile.lock旨在替换requirements.txt.然而,关于这些实际如何工作的文献并不多.我发现pipfile对Python的网站的PyPI部分的演变说明在这里,但它是相当混乱和无法解释的文件不同部分的语义.
有关如何理解这些文件的任何指示?
我有一个非常疯狂的正则表达式,我正在尝试诊断.它也很长,但我把它简化为以下脚本.使用Strawberry Perl v5.26.2运行.
use strict;
use warnings;
my $text = "M Y H A P P Y T E X T";
my $regex = '(?i)(?<!(Mon|Fri|Sun)day |August )abcd(?-i)';
if ($text =~ m/$regex/){
print "true\n";
}
else {
print "false\n";
}
Run Code Online (Sandbox Code Playgroud)
这给出了错误"正则表达式中没有实现可变长度的后备".
我希望你能帮助解决几个问题:
(?i)和(?-i).当我摆脱(?i)错误实际上消失了.perl将如何解释这部分正则表达式?我认为前两个字符被评估为"可选的文字括号",除了圆括号没有被转义,在这种情况下我会得到不同的语法错误,因为不会匹配右括号.两部分问题......
1)试图确定600851475143的最大素数因子,发现这个程序似乎在线工作,问题是我很难弄清楚它是如何工作的(我理解程序正在做什么的基础)...另外,如果您能够了解一些您可能知道找到素数的方法(可能没有测试每个数字)以及您的方法是如何工作的.
我在网上找到的主要因素代码
n = 600851475143
i = 2
while i * i < n:
while n % i == 0:
n = n / i
i = i + 1
print (n)
#takes about ~0.01secs
Run Code Online (Sandbox Code Playgroud)
2)为什么代码比这段代码快得多(代码只是测试速度而没有其他真正的用途)
i = 1
while i < 100:
i += 1
#takes about ~3secs
Run Code Online (Sandbox Code Playgroud) 当使用Pycharm时,我突然想到了一个弹出窗口,询问我是否要将此文件添加到Git中,并注意到如果我愿意,我可以稍后手动执行此操作.这是什么文件,为什么要给我这个推荐?
很抱歉,这是一个非常复杂的pipenv情况。
在我公司,我们正在使用pipenv(同时带有Pipfile和Pipfile.lock)来控制用于不同工程师笔记本电脑的软件包。对于我们来说,这比对大多数团队而言更为重要,因为我们还使用Zappa来部署AWS Lambda代码,并且显然可以直接从部署者的便携式计算机中打包依赖项以进行部署。因此,如果人们的笔记本电脑在依赖性方面不完全一致,我们可以根据部署它的人员在云中获得不同的行为。
我们发现,即使在尝试使用Pipfile和完全控制依赖关系之后Pipfile.lock,我们最终还是在不同的笔记本电脑上得到了不同的Python包,如pip freeze部署代码中的错误所示和所示。
这是显示笔记本电脑与老板笔记本电脑之间差异的确切过程(我引用的Pipfile代码在多行中,但由于将SO格式设置遇到问题,因此将其压缩为一行):
Pipfile带有通配符(如)指定的软件包的[requires] python_version = "3.6" [packages] flask = "*"。另外,我们没有一个Pipfile.lock,我的老板(他是该项目的第一个编码器)一直在运行--skip-lockPipfile以使用显式版本替换通配符,还使Python版本更加具体,例如[requires] python_version = "3.6.4" [packages] Flask = "==1.0.2"。为此,我获得了老板pip freeze输出的副本,并将版本复制到Pipfile名称与此处列出的名称匹配的位置(我跳过了所有不匹配的内容,因为我认为这是上游依赖性,而我们没有尚未触及)。我犯了这个Pipfile.lock来控制上游依赖项。因此,我的老板第一次pip install没有--skip-lock参加比赛就创建了一个,并做出了承诺。Pipfile.lock,用删除了我的环境,pipenv --rm然后用重新创建了pipenv installpip freeze并比较了输出,但是我们仍然有许多差异。我想我可以有我的老板删除其pipenv环境并重新安装依据承诺Pipfile和Pipfile.lock,但由于它们是基于他pip freeze我会感到惊讶,有点如果改变任何东西。
所以我只是想知道:这种行为真的出乎意料吗?我一直以为,和的组合pipenv …
scikit-learn有两个逻辑回归函数:
我只是很好奇第二个中的CV代表什么.我在ML中与"CV"匹配的唯一首字母缩写是交叉验证,但我猜这不是它,因为这将通过包装函数在scikit-learn中实现,而不是作为逻辑回归函数本身的一部分(我认为).
我从来没有完全理解Perl对包名称的解析,但我总是认为以下应该始终有效,假设您从包含它的目录中执行myscript.pl:
myscript.pl (contains the following statement: use Class1::Class2::Class3)
Class1/
Class2/
Class3.pm (contains the following package declaration: package Class1::Class2::Class3;)
Run Code Online (Sandbox Code Playgroud)
但是,这在我的代码中不起作用,因为无法找到Class3.pm.看看@INC,它不包括当前目录,只包含我的Strawberry Perl安装的各种目录.
推荐的解决方法是什么?我想我可以修改@INC,或者我可以开始使用FindBin,但我不确定哪个是最好的.我继承了这段代码并且只是将它迁移到一个新的位置,但它看起来不像旧的代码需要这样的解决方案(我可能是错的,仍在寻找......)
我已经分离了一个案例,其中Perl在警告消息中提供了一个非常误导性的行号.我在Strawberry Perl 5.16.3中测试了以下内容.
use strict;
use warnings;
my $choice = 0;
while ($choice == 0){
#This is not numeric
$choice = '5,6,7';
if ($choice eq '-4'){
print "This isn't going to happen\n";
}
}
Run Code Online (Sandbox Code Playgroud)
运行此操作时,您将收到警告消息Argument "5,6,7" isn't numeric in numeric eq (==) at example.pl line 11.但是第11行对应的行if ($choice eq '-4'){不能引起此警告消息,因为它不包含数字比较.
实际上发生的事情似乎是Perl进入下一个比较while ($choice == 0){,但是用于警告消息的行计数器没有前进.
使这种特殊情况更糟的是,由于"坏"比较是循环条件,它实际上远离提供的线.在我的(预简化)脚本中,它距离提供的行号数百行.
这是一个错误还是解析器的一个不幸的限制?
我找不到CPAN安装文件的权威/全面描述.我假设必须有一组规则并且它不像"XYZ目录"那么简单,因为,例如,Linux盒子上的多个用户可以运行CPAN,即使有一个Perl安装并且它仍然以某种方式工作.那么,那些规则是什么?
这个问题的第二部分:PERL5LIB环境变量的文档说它是"在查看标准库和当前目录之前查找Perl库文件的目录列表."
我假设CPAN没有安装到标准库位置,因为可能是针对特定Perl版本修复的.那么CPAN可能会安装到PERL5LIB中吗?
最后,正如我已经提到的,CPAN如何处理多个用户可能正在运行相同的Perl安装的事实?对不起,如果这是一个单独的问题,但似乎可能相关.
我试图找出在没有传递参数的情况和参数传递为0的情况下在Perl中区分的最佳方法,因为它们对我来说意味着不同的东西.
(通常我喜欢歧义,但在这种情况下我生成SQL所以我想用NULL替换未定义的args,但将0保留为0.)
所以这是含糊不清的:
sub mysub {
my $arg1 = shift;
if ($arg1){
print "arg1 could have been 0 or it could have not been passed.";
}
}
Run Code Online (Sandbox Code Playgroud)
到目前为止,这是我最好的解决方案......但我认为这有点难看.我想知道你是否可以想到一个更清洁的方式或者这对你来说是否合适:
sub mysub {
my $arg1 = (defined shift) || "NULL";
if ($arg1 ne "NULL"){
print "arg1 came in as a defined value.";
}
else {
print "arg1 came in as an undefined value (or we were passed the string 'NULL')";
}
}
Run Code Online (Sandbox Code Playgroud)