标准库清楚地记录了如何直接导入源文件(给定源文件的绝对文件路径),但如果源文件使用隐式同级导入,则此方法不起作用,如下例所示.
如果这个例子适用于隐式兄弟导入的存在?
我已经签出这个和这个其他的话题#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
作为(可执行)输入到我的genrule
?
从概念上讲,我知道以下方法:
third_party/python
rules-go
似乎也有几种方法可以这样做:
py_runtime
py_toolchain
(目前好像还没有)py_distribution_package
(目前好像还没有)genrules.tools
genrules.toolchains
例子:
我有一个 python 库:
myproject
- setup.py
- mylibrary
- __init__.py
- myfunction.py
Run Code Online (Sandbox Code Playgroud)
我想pip install
用Bazel制作一个-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) PEP 423规定项目名称和包名称应该相同,稍后给出了一个项目/包名称包含点的示例:
是:
包名称:“kheops.pyramid”,即import kheops.pyramid
项目名称:“kheops.pyramid”,即pip install kheops.pyramid
目录结构的用途是什么kheops.pyramid
以及如何setup.py
编写(特别是name
和packages
值)?
我还看到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
.
我试图了解机器如何从开机到运行内核。从我收集到的信息来看,在启动期间切换到保护模式以访问更多可寻址内存是很有用的,即使我们最终将切换到更传统的虚拟内存计划,并关闭页目录和页表以及分段.
似乎要切换到保护模式必须完成 3 件事:
lgdt
指令加载它ljmp
我想知道将段寄存器和指令指针转换为索引和偏移量以与 gdt 一起使用的逻辑。这个逻辑是硬件实现的吗?如果是这样,哪个硬件以及为什么要执行ljmp
该过程的一部分?为什么不简单地在 CR0 中设置 PE 标志以启用保护模式(没有以下内容ljmp
)?
我在 my~/.bashrc
中定义了一些函数,我想将它们转换为 Homebrew 包。目前,这些函数在我的命令行上充当自定义命令:
# .bashrc
function foo() {
# do something interesting
}
# at terminal
$ foo
# => does the interesting thing
Run Code Online (Sandbox Code Playgroud)
我已经使用brew create
. 我目前的做法如下:
script
,在一个目录中,brew-script
brew-script
下载为 tarball,brew-script.tar.gz
~/.bash_profile
以包含script
.bash_profile
在 brew 配方中修改是不好的做法吗?(例如,当用 卸载时brew uninstall script
, brew 应该以某种方式删除附加到的文本.bash_profile
......解析.bash_profile
似乎不是很有趣。)
是否已经建立了在 bash 脚本中包含函数的约定,以便它们可以从命令行使用?
简单地要求用户在他们的.bash_profile
或 中添加一些文本是常见的.bashrc
吗?
应该能够使用 brew 干净地安装,然后foo
作为命令运行: …
我在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种方法,所有这些方法都是为了一次处理几个记录:
使用逐个记录处理 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)我希望通过运行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-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 …
我正在尝试使用提供的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_id
和my_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上工作......
有人知道正确的方法吗?
什么时候c.Call(...)
返回非nil值?
c.Call(...)
发生网络故障(数据包丢失或超时或类似情况)时,唯一可以返回错误吗?
如果服务器srv
崩溃,会c.Call(...)
返回错误吗?
具体来说,能否c.Call(...)
在请求成功到达之后srv
但rpcname
处理程序函数返回之前返回错误?
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)