标准库清楚地记录了如何直接导入源文件(给定源文件的绝对文件路径),但如果源文件使用隐式同级导入,则此方法不起作用,如下例所示.
如果这个例子适用于隐式兄弟导入的存在?
我已经签出这个和这个其他的话题#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/pythonrules-go似乎也有几种方法可以这样做:
py_runtimepy_toolchain (目前好像还没有)py_distribution_package (目前好像还没有)genrules.toolsgenrules.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-scriptbrew-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)