小编Ped*_*ori的帖子

Python 3.5+:如何在给定完整文件路径的情况下动态导入模块(在存在隐式兄弟导入的情况下)?

标准库清楚地记录了如何直接导入源文件(给定源文件的绝对文件路径),但如果源文件使用隐式同级导入,则此方法不起作用,如下例所示.

如果这个例子适用于隐式兄弟导入的存在?

我已经签出这个这个其他的话题#1的问题,但他们并没有解决隐同级进口用手导入的文件.

设置/实施例

这是一个说明性的例子

目录结构:

root/
  - directory/
    - app.py
  - folder/
    - implicit_sibling_import.py
    - lib.py
Run Code Online (Sandbox Code Playgroud)

app.py:

import os
import importlib.util

# construct absolute paths
root = os.path.abspath(os.path.dirname(os.path.dirname(os.path.realpath(__file__))))
isi_path = os.path.join(root, 'folder', 'implicit_sibling_import.py')

def path_import(absolute_path):
   '''implementation taken from https://docs.python.org/3/library/importlib.html#importing-a-source-file-directly'''
   spec = importlib.util.spec_from_file_location(absolute_path, absolute_path)
   module = importlib.util.module_from_spec(spec)
   spec.loader.exec_module(module)
   return module

isi = path_import(isi_path)
print(isi.hello_wrapper())
Run Code Online (Sandbox Code Playgroud)

lib.py:

def hello():
    return 'world'
Run Code Online (Sandbox Code Playgroud)

implicit_sibling_import.py:

import lib # this is the …
Run Code Online (Sandbox Code Playgroud)

python import python-3.x python-importlib

29
推荐指数
2
解决办法
6185
查看次数

如何(密封地)在 Bazel 中包含 Python 解释器来构建 Python 库(sdist)

我如何(密封地)包含python作为(可执行)输入到我的genrule?

从概念上讲,我知道以下方法:

似乎也有几种方法可以这样做:


例子:

我有一个 python 库:

myproject
- setup.py
- mylibrary
  - __init__.py
  - myfunction.py
Run Code Online (Sandbox Code Playgroud)

我想pip installBazel制作一个-able 发行版,以便我可以:

pip install <path/to/distribution>
python
>>> from mylibrary.myfunction import helloworld
>>> helloworld()
Run Code Online (Sandbox Code Playgroud)

我添加了一个(空)WORKSPACE文件,myproject/WORKSPACE并遵循了这篇中等文章中的示例:

# myproject/BUILD
genrule(
    name = "mylibrary_sdist",
    srcs = glob(["**/*.py"]),
    outs = ["mylibrary.tar.gz"],
    cmd = "python setup.py sdist && …
Run Code Online (Sandbox Code Playgroud)

python bazel

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

如何用点“.”构建Python项目 或者在项目/包名称中添加下划线“-”?

PEP 423规定项目名称和包名称应该相同,稍后给出了一个项目/包名称包含点的示例

是:
包名称:“kheops.pyramid”,即import kheops.pyramid
项目名称:“kheops.pyramid”,即pip install kheops.pyramid

目录结构的用途是什么kheops.pyramid以及如何setup.py编写(特别是namepackages值)?

我还看到PEP 503规定名称应该通过替换_-.来标准化-。这是否意味着kheops-pyramid应该使用 而不是kheops.pyramid?如果是这样,我是否需要一个目录名为 的包kheops-pyramid,并且在尝试时不会-导致问题(例如语法错误)import kheops-pyramid

编辑
我尝试制作一个项目/包kheops.pyramid以遵守PEP 423,但我无法弄清楚什么样的目录结构和setup.py组合将允许我在import kheops.pyramid 没有pip install kheops.pyramid类似ImportError: No module named kheops.pyramid.

python package pep

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

在 CR0 中设置 PE 标志如何启用保护模式?

我试图了解机器如何从开机到运行内核。从我收集到的信息来看,在启动期间切换到保护模式以访问更多可寻址内存是很有用的,即使我们最终将切换到更传统的虚拟内存计划,并关闭页目录和页表以及分段.

似乎要切换到保护模式必须完成 3 件事:

  1. 设置全局描述符表(gdt)并使用lgdt指令加载它
  2. 将控制寄存器 CR0 中的 PE 标志/位设置为启用(即值 1)
  3. 执行跳远 ljmp

我想知道将段寄存器和指令指针转换为索引和偏移量以与 gdt 一起使用的逻辑。这个逻辑是硬件实现的吗?如果是这样,哪个硬件以及为什么要执行ljmp该过程的一部分?为什么不简单地在 CR0 中设置 PE 标志以启用保护模式(没有以下内容ljmp)?

assembly operating-system kernel real-mode protected-mode

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

通过 Homebrew 模块化和分发 bash 脚本

语境

我在 my~/.bashrc中定义了一些函数,我想将它们转换为 Homebrew 包。目前,这些函数在我的命令行上充当自定义命令:

# .bashrc
function foo() {
    # do something interesting
}

# at terminal
$ foo
# => does the interesting thing
Run Code Online (Sandbox Code Playgroud)

方法

我已经使用brew create. 我目前的做法如下:

  1. 将函数定义移动到一个单独的文件中script,在一个目录中,brew-script
  2. 使可brew-script下载为 tarball,brew-script.tar.gz
  3. 让我的 brew 公式在终端会话开始时将文本附加到末尾~/.bash_profile以包含script

顾虑

  1. .bash_profile在 brew 配方中修改是不好的做法吗?(例如,当用 卸载时brew uninstall script, brew 应该以某种方式删除附加到的文本.bash_profile......解析.bash_profile似乎不是很有趣。)

  2. 是否已经建立了在 bash 脚本中包含函数的约定,以便它们可以从命令行使用?

  3. 简单地要求用户在他们的.bash_profile或 中添加一些文本是常见的.bashrc吗?

想要的结果

应该能够使用 brew 干净地安装,然后foo作为命令运行: …

bash homebrew .bash-profile

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

在Python中处理大型数据库表的每一行

上下文

我在python中有一个函数,在我的表中得分.我想算术地计算所有行的分数(例如,计算分数的总和,平均值等).

def compute_score(row):
  # some complicated python code that would be painful to convert into SQL-equivalent
  return score
Run Code Online (Sandbox Code Playgroud)

显而易见的第一种方法是简单地读入所有数据

import psycopg2

def sum_scores(dbname, tablename):
  conn = psycopg2.connect(dbname)
  cur = conn.cursor()
  cur.execute('SELECT * FROM ?', tablename)
  rows = cur.fetchall()
  sum = 0
  for row in rows:
    sum += score(row)
  conn.close()
  return sum
Run Code Online (Sandbox Code Playgroud)

问题

我希望能够处理尽可能多的数据,因为我的数据库可以容纳.这可能会更大,以适应Python的内存,所以fetchall()在我看来,在这种情况下它将无法正常运行.

提出的解决方案

我正在考虑3种方法,所有这些方法都是为了一次处理几个记录:

  1. 使用逐个记录处理 fetchone()

    def sum_scores(dbname, tablename):
      ...
      sum = 0
      for row_num in cur.rowcount:
        row = cur.fetchone()
        sum += score(row)
      ...
      return sum …
    Run Code Online (Sandbox Code Playgroud)

python psycopg2 bigdata

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

使用Docker Compose运行相同多容器应用程序的副本

问题

我希望通过运行2个容器作为一个单元,通过Docker运行webapp.

1个容器运行我的Web服务器(Tomcat 7).

另一个容器运行我的数据库(Postgres 9.4).

我可以运行docker-compose up,Docker能够按照我的指定启动我的两个容器docker-compose.yml:

web:                                                                                     
  build: .                                                                         
  ports:                                                                           
   - "5000"                                                                        
  links:                                                                           
   - db                                                                         
db:                                                                             
  image: postgres
Run Code Online (Sandbox Code Playgroud)

我希望能够通过docker-compose up再次运行来启动我的webapp的另一个副本,但这会导致Docker告诉我已经有容器正在运行:

$ docker-compose up -d
Creating composetest_db_1
Creating composetest_web_1
$ docker-compose up -d
composetest_db_1 is up-to-date
composetest_web_1 is up-to-date
Run Code Online (Sandbox Code Playgroud)

我的工作

通过使用-p选项为新副本提供不同的项目名称,我解决了这个问题:

$ docker-compose -p project1 up -d
...
Successfully built d3268e345f3d
Creating project1_web_1
$ docker-compose -p project2 up -d
...
Successfully built d3268e345f3d
Creating project2_web_1
Run Code Online (Sandbox Code Playgroud)

不幸的是,这为每个副本创建了新图像:

$ docker images
project1_web          latest …
Run Code Online (Sandbox Code Playgroud)

docker

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

在OSX上通过docker-py连接到Docker-Machine

上下文

我正在尝试使用docker-py连接到OSX上的docker-machine.

我不能简单地使用标准,Client(base_url='unix://var/run/docker.sock')因为docker在docker-machine虚拟机上运行,而不是我的本地操作系统.

相反,我试图使用以下方法安全地连接到VM docker.tls:

from docker import Client
import docker.tls as tls
from os import path

CERTS = path.join(path.expanduser('~'), '.docker', 'machine', 'certs')

tls_config = tls.TLSConfig(
    client_cert=(path.join(CERTS, 'cert.pem'), path.join(CERTS,'key.pem')),
    ca_cert=path.join(CERTS, 'ca.pem'),
    verify=True
#verify=False
)
client = docker.Client(base_url='https://192.168.99.100:2376', tls=tls_config)
Run Code Online (Sandbox Code Playgroud)

问题

当我尝试运行此代码(print client.containers()在下一行运行类似的东西)时,我收到此错误:

requests.exceptions.SSLError: hostname '192.168.99.100' doesn't match 'localhost'
Run Code Online (Sandbox Code Playgroud)

我一直试图在类似问题上遵循github问题boot2docker,即.旧版本docker-machine,但我不太了解如何实现SSL证书.我尝试按照github问题的建议添加192.168.99.100 localhost到我的/etc/hosts文件末尾,但这并没有解决问题(即使之后export DOCKER_HOST=tcp://localhost:2376).

也许通过证书进行连接不是可行的方法docker-machine,因此任何连接到特定docker-machine通道的替代方法的答案docker-py …

macos ssl docker dockerpy docker-machine

6
推荐指数
2
解决办法
2048
查看次数

使用Ruby中的imgur API获取图像(在Rails上)

我正在尝试使用提供的API与Ruby 2.0.0和Rails 4.0.0从imgur中提取图像.我已经尝试以Ruby 2.0.0文档中列出的各种方式构建http请求,但无济于事.

这是代码:

require 'net/http'
require 'net/https'
def imgur
  headers    = {
    "Authorization" => "Client-ID " + my_client_id
  }
  path       = "/3/gallery/image/#{img_id}.json"
  uri = URI("https://api.imgur.com"+path)
  request, data = Net::HTTP::Get.new(path, headers)

  response = Net::HTTP.new(uri.host, uri.port).start {|http| http.request(request) }
  puts "response:"
  p response
  puts response
end
Run Code Online (Sandbox Code Playgroud)

在哪里img_idmy_client_id只是硬编码适当的值.(imgur在与我的站点的根URL对应的控制器操作中调用方法)

这是我运行时得到的响应rails s(所以我使用localhost:3000),然后访问根URL,localhost:3000(它调用调用的动作imgur):

#<Net::HTTPBadRequest 400 Bad Request readbody=true>
#<Net::HTTPBadRequest:0x007f8a6ce0da78>
Run Code Online (Sandbox Code Playgroud)

更新:

此外,这工作:

curl --header "Authorization: Client-ID my_client_id" https://api.imgur.com/3/gallery/image/7x98w9T.json

(再次,my_client_id用我的实际客户端ID进行硬编码).现在让它在Ruby上工作......

有人知道正确的方法吗?

ruby ruby-on-rails imgur

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

是什么原因导致客户端。调用rpc在Go(golang)中返回错误?

什么时候c.Call(...)返回非nil值?

c.Call(...)发生网络故障(数据包丢失或超时或类似情况)时,唯一可以返回错误吗?

如果服务器srv崩溃,会c.Call(...)返回错误吗?

具体来说,能否c.Call(...)在请求成功到达之后srvrpcname处理程序函数返回之前返回错误?

import (
    "net/rpc"
    "fmt"
)

func call(srv string, rpcname string, args interface{}, reply interface{}) bool {
    c, errx := rpc.Dial("unix", srv)
    if errx != nil {
        return false
    }
    defer c.Close()

    err := c.Call(rpcname, args, reply)
    if err == nil {
        return true
    }

    fmt.Println(err)
    return false
}
Run Code Online (Sandbox Code Playgroud)

rpc go

5
推荐指数
0
解决办法
2079
查看次数