标签: packages

如何导入__init__.py中定义的类

我正在尝试组织一些模块供我自己使用.我有这样的事情:

lib/
  __init__.py
  settings.py
  foo/
    __init__.py
    someobject.py
  bar/
    __init__.py
    somethingelse.py
Run Code Online (Sandbox Code Playgroud)

lib/__init__.py,我想定义一些类,如果我导入lib使用.但是,如果不将类分成文件,并将其导入,我似乎无法弄明白__init__.py.

而不是说:

    lib/
      __init__.py
      settings.py
      helperclass.py
      foo/
        __init__.py
        someobject.py
      bar/
        __init__.py
        somethingelse.py

from lib.settings import Values
from lib.helperclass import Helper
Run Code Online (Sandbox Code Playgroud)

我想要这样的东西:

    lib/
      __init__.py  #Helper defined in this file
      settings.py
      foo/
        __init__.py
        someobject.py
      bar/
        __init__.py
        somethingelse.py

from lib.settings import Values
from lib import Helper
Run Code Online (Sandbox Code Playgroud)

是可能的,还是我必须将类分成另一个文件?

编辑

好吧,如果我从另一个脚本导入lib,我可以访问Helper类.如何从settings.py访问Helper类?

此处的示例描述了包内引用.我引用"子模块经常需要互相引用".在我的例子中,lib.settings.py需要Helper,而lib.foo.someobject需要访问Helper,那么我应该在哪里定义Helper类?

python packages

96
推荐指数
4
解决办法
10万
查看次数

您在Java项目中使用什么策略进行包命名?为什么?

我刚才考虑过这个问题,最近我的商店正在制作它的第一个真正的Java网络应用程序.

作为介绍,我看到两个主要的包命名策略.(要清楚,我不是指整个'domain.company.project'的一部分,我在谈论它下面的包约定.)无论如何,我看到的包命名约定如下:

  1. 功能:根据业务领域,根据其功能在架构上命名您的包,而不是其身份. 另一个术语可能是根据'layer'命名.所以,你有一个*.ui包和一个*.domain包和一个*.orm包.您的包是水平切片而不是垂直切片.

    这是比逻辑命名更常见.事实上,我不相信我曾经见过或听说过这样做的项目.这当然让我很害羞(有点像认为你已经提出解决NP问题的方法),因为我不是非常聪明,我认为每个人都必须有充分的理由按照他们的方式去做.在另一方面,我不反对人们只是缺少在房间里的大象我从来没有听说过的实际参数做包命名这种方式.它似乎是事实上的标准.

  2. 逻辑:根据业务域标识命名您的包,并将与该垂直功能片有关的每个类放入该包中.

    正如我之前提到的,我从未见过或听说过这一点,但这对我来说很有意义.

    1. 我倾向于垂直而不是水平地接近系统.我想进入并开发订单处理系统,而不是数据访问层.显然,我很有可能在该系统的开发中触及数据访问层,但重点是我不这么认为.当然,这意味着当我收到变更单或想要实现一些新功能时,不必为了找到所有相关的类而不必去一堆包中钓鱼.相反,我只是查看X包,因为我正在做的与X有关.

    2. 从开发的角度来看,我认为让您的软件包记录您的业务领域而不是您的架构是一项重大胜利.我觉得这个领域几乎总是系统的一部分,因为系统的体系结构,特别是在这一点上,它的实现几乎变得平凡,因此很难理解.事实上,我可以通过这种类型的命名约定进入系统,并立即从包的命名知道它处理订单,客户,企业,产品等,这似乎非常方便.

    3. 看起来这样可以让你更好地利用Java的访问修饰符.这使您可以更清晰地将接口定义到子系统中,而不是定义到系统的各个层中.因此,如果你有一个你想要透明持久的订单子系统,理论上你永远不会让任何其他东西知道它是持久的,因为不必在dao层中为其持久性类创建公共接口,而是将dao类包装在只有它处理的类.显然,如果您想公开此功能,可以为其提供界面或将其公开.通过将系统功能的垂直切片分成多个包,您似乎失去了很多.

    4. 我认为我可以看到的一个缺点是,它确实使得剥离层更加困难.您必须进入并更改所有软件包中的所有类,而不是仅删除或重命名软件包,然后使用备用技术删除新软件包.但是,我不认为这是一个大问题.这可能源于缺乏经验,但我必须想象,与您进入和编辑系统中的垂直特征切片的次数相比,您更换技术的次数相形见绌.

所以我想那个问题会告诉你,你如何命名你的包裹以及为什么?请理解我并不一定认为我偶然发现了金鹅或其他东西.我对这一切都很陌生,主要是学术经验.但是,我无法发现我的推理中的漏洞,所以我希望你们都能这样,以便继续前进.

java packages naming-conventions

88
推荐指数
4
解决办法
3万
查看次数

使用pip命令从requirements.txt升级python包

如何使用pip命令从requirements.txt文件升级所有python包?

试过下面的命令

$ pip install --upgrade -r requirements.txt
Run Code Online (Sandbox Code Playgroud)

因为,python包后缀为版本号(Django==1.5.1),它们似乎没有升级.有没有比手动编辑requirements.txt文件更好的方法?

编辑

正如Andy在他的回答包中提到的那样固定到特定版本,因此无法通过pip命令升级包.

但是,我们可以pip-tools使用以下命令实现此目的.

$ pip-review --auto
Run Code Online (Sandbox Code Playgroud)

这将自动从requirements.txt升级所有包(确保pip-tools使用pip install命令安装).

python packages pip requirements.txt

78
推荐指数
10
解决办法
5万
查看次数

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

Windows 7,update.packages问题:"无法移动临时安装"?

我,使用R 2.13.0与Windows 7,给我的用户完全权限到R后的文件夹(如描述在这里).这允许我很好地安装新包.

但是,当使用update.packages()来更新现有的包时,我不断收到以下错误(例如,更新MASS包时):

包'MASS'成功解包并检查MD5总和

警告:无法将临时安装 'C:\ Program Files\R\R-2.13.0\library\file6cae3bcf\MASS'移动到'C:\ Program Files\R\R-2.13.0\library\MASS'

对于如何解决这个问题,有任何的建议吗?

ps:以管理员身份运行R或将库位置移出Program Files不是一个解决方案(这是一个黑客 - 但我正在寻找解决方案)

permissions file-permissions packages r windows-7

74
推荐指数
5
解决办法
8万
查看次数

接口应该放在一个单独的包中吗?

我是一个从事一个相当大的项目的团队的新手,拥有大量的组件和依赖项.对于每个组件,都有一个interfaces包放置了该组件的公开接口.这是一个好习惯吗?

我通常的做法一直是接口和实现在同一个包中.

java packages interface

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

你对Emacs的包管理器有什么期望?

尽管存在数千个Emacs Lisp库,但GNU Emacs在版本24.1之前没有(内部)包管理器.

我想大多数用户会同意,目前查找,安装并特别是保持最新的Emacs Lisp库是相当不方便的.

使生活更轻松的页面

对于早于24.1的Emacs版本:

  • Emacs Lisp列表 - 问题:我看到死人(链接).
  • Emacswiki - 问题:可能包含坚果的痕迹(恶意代码).
  • Emacsmirror - 我正在处理的软件包存储库.问题:没有包管理器本地支持它.

一些包管理员

并不是没有人尝试过.(当问到这个问题时,其中一些不存在.)


UPDATE - package.el包含在GNU Emacs中,从版本24.1开始


包已包含在Emacs主干中.epkg还没有准备好,目前还没有.至少install-elisp,插件和use-package似乎不再被主动维护.

我创建了一个包含所有这些包管理器作为子模块的git 存储库.

一些可能有用的实用程序

包管理器可以使用这些实用程序和/或它们可以用于维护包的镜像.

emacs packages package-managers

72
推荐指数
6
解决办法
5771
查看次数

如何使用npm安装多个版本的包

由于https://github.com/npm/npm/issues/2943,npm将永远不会支持别名包和安装同一包的多个版本的能力.

在github问题上发布的变通方法可能适用于纯JS模块,但随着npm成为前端包管理的标准,包现在包括各种资产,如CSS.

有没有解决方法来安装同一个包的多个版本?

我想出的最好的想法是"克隆"一个包,并用一个稍微不同的名称发布它.

例如,如果你需要的多个版本jquery,你可以只包发布所谓jquery-alias1,jquery-alias2,jquery-alias3等,然后在你的设置适当的版本package.json.

或者你可以根据自己的版本号,比如命名的包jquery-1.11.x,jquery-2.1.x等等.

但这两种方法看起来都很草率.还有更好的吗?

frontend packages npm

69
推荐指数
4
解决办法
3万
查看次数

未使用的导入和对象是否会对性能产生影响

我有一个疑问,Java代码中未使用的导入和未使用的对象是否会产生任何性能影响?

假设一个对象被初始化并且从未使用过,会发生什么?未使用的进口成本是多少?

java import bytecode packages

66
推荐指数
3
解决办法
2万
查看次数

简单统计 - 用于计算均值,标准差等的Java包

你能建议任何简单的Java统计软件包吗?

我不一定需要任何先进的东西.我很惊讶,似乎没有一个函数来计算java.lang.Math包中的平均值...

你们有什么用呢?


编辑

关于:

编写一个计算均值和标准差的简单类有多难?

好吧,不难.手工编码之后我才问过这个问题.但是,当我需要这些功能时,它只会增加我的Java挫折感,而不是让这些最简单的功能可用.我不记得用心计算stdev的公式:)

java math statistics packages

65
推荐指数
4
解决办法
7万
查看次数