小编Bob*_*bby的帖子

Python3中的Python命名空间包

命名空间包的主题似乎对于初学者来说有点混乱,并且它的先前版本的Python以几种不同的方式实现它或者StackOverflow上的许多问答都是过时的并没有帮助.我正在寻找Python 3.5或以后的解决方案.

场景:

我正在将一堆Python代码重构为模块和子模块,并且努力使这些项目中的每一个都设置为在坐在同一名称空间中时彼此独立地运行.

我们最终将使用内部PyPi服务器,将这些软件包提供给我们的内部网络,并且不希望将它们与外部(公共)PyPi软件包混淆.

示例: 我有2个模块,我希望能够执行以下操作:

from org.client.client1 import mod1
from org.common import config
Run Code Online (Sandbox Code Playgroud)

反映的模块将分开:

存储库1:

org_client_client1_mod1/
  setup.py
  mod1/
    __init__.py
    somefile.py
Run Code Online (Sandbox Code Playgroud)

存储库2:

org_common_config/
  setup.py
  config/
    __init__.py
    someotherfile.py
Run Code Online (Sandbox Code Playgroud)

我的Git仓库已经设置为org_client_client1_mod1org_common_config,所以我只需要在包装和执行安装__init__.py文件,我相信.

问题:

#1

随着__init__.py,我应该使用哪些(如果有的话)?:

from pkgutil import extend_path
__path__ = extend_path(__path__, __name__)
Run Code Online (Sandbox Code Playgroud)

要么:

import pkg_resources
pkg_resources.declare_namespace(__name__)
Run Code Online (Sandbox Code Playgroud)

#2

setup.py,我还需要添加namespace_modules参数,如果是,我会使用namespace_modules=['org.common'],还是namespace_modules=['org', 'common']

#3

我可以通过以某种方式实现这一点而放弃以上所有内容吗?也许是更简单或更"pythonic"的东西?

python setuptools pypi python-3.x namespace-package

26
推荐指数
2
解决办法
1787
查看次数

嵌入式系统上的Docker,为什么不呢?

最近有一个项目引发了我的方式,包括编写几个(支持Linux的)嵌入式设备,为它们部署软件,以及允许在git repo中更新代码库时更新应用程序.

最初的想法是为每个设备制作一个标准图像,然后我开始尝试在UDOO Quad和Intel Edison上安装docker,但是到目前为止还没有任何成功.

我的想法是,在嵌入式设备上安装Docker似乎是一个好主意 - 但如果是这样的话,那么它肯定会被移植到现在.Resin.io是唯一一个似乎在做这些努力的团体.

有没有我缺少的东西,或者有没有明确的理由说明Docker在嵌入式设备上没有意义?如果没有理由,并且在嵌入式系统上运行Docker 确实有意义,那么我是否忽略了一些问题:是否有任何关于移植的讨论来源,或者如何解决这个问题?

containers embedded-linux docker intel-edison

11
推荐指数
2
解决办法
8858
查看次数

Node Express Unix域套接字权限

我正在运行一个nginx服务器和一个节点表达web服务器,使用daemontools,setup通过Unix Domain Sockets进行通信.只有一些问题:

  1. 套接字文件在关闭时保持存在,因此我必须在重新启动服务器时将其删除,否则我将收到EADDRINUSE错误.
  2. nginx服务器作为nginx用户运行,节点服务器作为节点用户运行.
  3. 当服务器启动时,套接字文件由Express创建,umask将套接字文件的权限设置为755.
  4. setuidgid应用程序将组设置为用户的默认组,在这种情况下都是节点用户名.
  5. 应用程序和daemontools运行脚本的部署脚本在节点服务器实例启动之前执行,因此无法设置文件的权限,因为必须在启动过程中重新创建它.

如果我chgrp和chmod g + w套接字文件,一切正常.有没有办法设置它,以便生成节点应用程序的套接字文件,并使用正确的权限让nginx能够在不损害一个应用程序或另一个应用程序的安全独立性的情况下写入它?如果还有一种方法可以设置套接字文件的权限,那么我甚至可以将nginx添加到节点用户的组中,以便它可以组写.

file-permissions nginx unix-socket node.js express

9
推荐指数
2
解决办法
4353
查看次数

创建一个自定义setxkbmap选项

奇怪的是,这似乎应该已经做过:我想在键盘顶部交换– 键上的数字符号,以便:10

  • 当我按下6键时,*键入而不是6
  • 当我按Shift+时66将显示数字而不是*

我还想进行其他一些修改,但很快发现其他人在使用选项之前setxkbmapcaps:swapescape例如)已经完成了这些布局修改。


鉴于以上所述,这是一个三部分的问题:

  1. 键盘顶行上是否可以交换数字和符号?
  2. 是否存在,无需手动浏览*.lst和中的*.xml文件,有没有办法找出这种情况是否存在/usr/share/X11/xkb/rules/
  3. 最后,如果我要为创建一个选项setxkbmap,那将是一种理想的方法,以及如何将我的选项贡献回社区?

至于问题3:

  • 我试图创建该选项而没有成功(setxkbmap默默地失败了,我甚至对自己的方法都不自信)。
  • 我找不到该项目的托管位置。
  • 除了man setxkbmap涉及该主题的各种博客文章之外,我还无法找到任何有关此主题的文档。

linux keyboard keyboard-layout

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

Python:获得路径中所有父项的可迭代的优雅方式

使用基于路径的资源系统,应用程序需要根据路径查找管理给定资源的第一个工作资源.我需要一种简洁,pythonic的方式来生成以下内容:

输入:

/house/dogs/ralph/bone
Run Code Online (Sandbox Code Playgroud)

输出:

/house/dogs/ralph/bone
/house/dogs/ralph
/house/dogs
/house
Run Code Online (Sandbox Code Playgroud)

注意:可以使用os.path或类似的内置函数,但这些不是文件系统资源.输出可以是任何可迭代的(列表,集合,生成器等).

python iterable

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

在预先存在的数据库上定制多对多的热切加载

我正在尝试使用Sequelize设置我现有的Express应用程序.在应用程序中,在用户登录时,我执行查询以尝试获取表示用户的对象以及来自少数几个表的几个关系.我已经使用多对多关系将我的测试下拉到以下最小化表示.

这是我的用户模型(在coffeescript中):

module.exports = (sequelize, DataTypes) ->
  sequelize.define "User",
    id:
      type: DataTypes.INTEGER(11)
      primaryKey: true
      autoIncrement: true

    email:
      type: DataTypes.STRING
      allowNull: false

  ,
    tableName: 'users'
    classMethods:
      associate: (models) ->
        @hasOne models.UserDetail
        @hasMany models.Plan,
          through: models.UserPlan
          foreignKey: 'user_id'
Run Code Online (Sandbox Code Playgroud)

这是我的计划模型:

module.exports = (sequelize, DataTypes) ->
  sequelize.define "Plan",
    id:
      type: DataTypes.INTEGER(11)
      primaryKey: true
      autoIncrement: true

    plan:
      type: DataTypes.STRING
      allowNull: false
  ,
    tableName: 'plans'
    classMethods:
      associate: (models) ->
        @hasMany models.User,
          through: models.UserPlan
          foreignKey: 'plan_id'
Run Code Online (Sandbox Code Playgroud)

而且,这是中间的"通过"表(user_plans):

module.exports = (sequelize, DataTypes) ->
  sequelize.define "UserPlan",
    user_id:
      type: DataTypes.INTEGER(11) …
Run Code Online (Sandbox Code Playgroud)

mysql many-to-many eager-loading sequelize.js

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