与我一起工作的小组一直在使用和开发一个 Python 包,出于这个问题的目的,我将其称为 foobuilder。我们使用我们为用户提供的私有(private) RPM 和 Deb 存储库为 Linux 系统提供更新。
最近,PyPi 中添加了一个同名的公共(public)包。它还打包在公共(public) Debian 存储库等地方。由于我们不公开宣传我们的套餐,因此出现同名套餐是可以理解的。
这对于 foobuilder 来说似乎是个大问题,因为在某个地方,用户可能会尝试安装我们的 foobuilder 而公共(public) foobuilder软件包安装在同一系统上。
除了 Python 中的明显问题外,我猜想将我们的存储库添加到 Debian 包管理器程序中也会导致一些问题,尽管我还没有尝试过这种情况。
由于我们多年来一直在使用专有的foobuilder,因此存在大量代码想要import foobuilder 并希望获得我们的包,所以我认为更改名称不可行。
我考虑过将包的名称更改为 my_foobuilder,并让它包含一个名为 foobuilder 的元包,它只包含一个 __init__。 py 从 my_foobuilder 导入所有内容。我可以指示新用户直接导入 my_foobuilder。然后我可以开始弃用 foobuilder 名称。最后,这将导致与现在将 foobuilder 更改为 my_foobuilder 相同的工作量,因为每个人都需要更新和 foobuilder 名称不能永远处于弃用炼狱中。
Debian 问题不应该太难解决;我可以将 debian 包名称更改为 my_foobuilder 但它仍然安装相同的(冲突的)Python 包。然后我可以将 my_foobuilder 包设置为 Conflict 与 foobuilder。它可能需要用户在过渡期间摆弄他们的包管理器才能让事情回到正轨,但我认为这没什么大不了的。尽管如此,这仍然会阻止用户同时使用公共(public) foobuilder 包。
有没有比我上面考虑的更简单或更好的方法来处理这种情况?我正在考虑的解决方案有什么问题吗?你会如何处理这个问题?
最佳答案
我会发送电子邮件给新的 foobuilder 包作者来讨论这个问题。很明显,你们中的一员需要更改包名称;由于您的程序的专有性质,可能不希望更改其名称...向新包作者询问这个问题可能会提出一些新的解决方案。
确实没有明智的方法让 Python 以某种方式处理此问题,因此“导入 foobuilder”可能意味着两件事。
关于python - 如何处理专有 Python 包名称与公共(public)包名称冲突?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6617895/
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
我在理解Enumerator.new方法的工作原理时遇到了一些困难。假设文档中的示例:fib=Enumerator.newdo|y|a=b=1loopdoy[1,1,2,3,5,8,13,21,34,55]循环中断条件在哪里,它如何知道循环应该迭代多少次(因为它没有任何明确的中断条件并且看起来像无限循环)? 最佳答案 Enumerator使用Fibers在内部。您的示例等效于:require'fiber'fiber=Fiber.newdoa=b=1loopdoFiber.yieldaa,b=b,a+bendend10.times.m
我不知道为什么,但是当我设置这个设置时它无法编译设置:static_cache_control,[:public,:max_age=>300]这是我得到的syntaxerror,unexpectedtASSOC,expecting']'(SyntaxError)set:static_cache_control,[:public,:max_age=>300]^我只想将“过期”header设置为css、javaascript和图像文件。谢谢。 最佳答案 我猜您使用的是Ruby1.8.7。Sinatra文档中显示的语法似乎是在Ruby1.
这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Pythonconditionalassignmentoperator对于这样一个简单的问题表示歉意,但是谷歌搜索||=并不是很有帮助;)Python中是否有与Ruby和Perl中的||=语句等效的语句?例如:foo="hey"foo||="what"#assignfooifit'sundefined#fooisstill"hey"bar||="yeah"#baris"yeah"另外,类似这样的东西的通用术语是什么?条件分配是我的第一个猜测,但Wikipediapage跟我想的不太一样。
什么是ruby的rack或python的Java的wsgi?还有一个路由库。 最佳答案 来自Python标准PEP333:Bycontrast,althoughJavahasjustasmanywebapplicationframeworksavailable,Java's"servlet"APImakesitpossibleforapplicationswrittenwithanyJavawebapplicationframeworktoruninanywebserverthatsupportstheservletAPI.ht
如何在Ruby中按名称传递函数?(我使用Ruby才几个小时,所以我还在想办法。)nums=[1,2,3,4]#Thisworks,butismoreverbosethanI'dlikenums.eachdo|i|putsiend#InJS,Icouldjustdosomethinglike:#nums.forEach(console.log)#InF#,itwouldbesomethinglike:#List.iternums(printf"%A")#InRuby,IwishIcoulddosomethinglike:nums.eachputs在Ruby中能不能做到类似的简洁?我可以只
华为OD机试题本篇题目:明明的随机数题目输入描述输出描述:示例1输入输出说明代码编写思路最近更新的博客华为od2023|什么是华为od,od薪资待遇,od机试题清单华为OD机试真题大全,用Python解华为机试题|机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为o
我想解析一个已经存在的.mid文件,改变它的乐器,例如从“acousticgrandpiano”到“violin”,然后将它保存回去或作为另一个.mid文件。根据我在文档中看到的内容,该乐器通过program_change或patch_change指令进行了更改,但我找不到任何在已经存在的MIDI文件中执行此操作的库.他们似乎都只支持从头开始创建的MIDI文件。 最佳答案 MIDIpackage会为您完成此操作,但具体方法取决于midi文件的原始内容。一个MIDI文件由一个或多个音轨组成,每个音轨是十六个channel中任何一个上的
本文主要介绍在使用Selenium进行自动化测试或者任务时,对于使用了iframe的页面,如何定位iframe中的元素文章目录场景描述解决方案具体代码场景描述当我们在使用Selenium进行自动化测试的时候,可能会遇到一些界面或者窗体是使用HTML的iframe标签进行承载的。对于iframe中的标签,如果直接查找是无法找到的,会抛出没有找到元素的异常。比如近在咫尺的例子就是,CSDN的登录窗体就是使用的iframe,大家可以尝试通过F12开发者模式查看到的tag_name,class_name,id或者xpath来定位中的页面元素,会抛出NoSuchElementException异常。解决
文章目录git常用命令(简介,详细参数往下看)Git提交代码步骤gitpullgitstatusgitaddgitcommitgitpushgit代码冲突合并问题方法一:放弃本地代码方法二:合并代码常用命令以及详细参数gitadd将文件添加到仓库:gitdiff比较文件异同gitlog查看历史记录gitreset代码回滚版本库相关操作远程仓库相关操作分支相关操作创建分支查看分支:gitbranch合并分支:gitmerge删除分支:gitbranch-ddev查看分支合并图:gitlog–graph–pretty=oneline–abbrev-commit撤消某次提交git用户名密码相关配置g