我正在处理P
带有 setuptools 和 pkg_resources 的包,该包在安装后需要下载一些二进制文件并将它们放在专用目录 ( P/bin/
) 中。
我正在尝试使用pkg_ressources.resource_filename
来获取绝对目录路径。(为了与 virtualenv 一起工作)
在使用 安装期间python setup.py install
, pkg_ressources.resource_filename 不会返回类似 的路径/home/user/tests/venv/lib/python3.4/site-package/P/bin/
,而是返回实际模块的路径,例如/home/user/projects/P/P/bin/
。
这是一个问题,因为我需要安装目录(在 virtualenv 内),而不是我的个人项目目录(我开发模块的地方)。
如果我尝试通过 pypi,使用pip install module
,返回的目录pkg_ressources.resource_filename
是一个临时文件,例如/tmp/pip-build-xxxxxxx/P/bin/
,这又不是应该放置二进制文件的地方。
这是我的 setup.py:
from setuptools import setup
import os
from setuptools.command.install import install as _install
from pkg_resources import resource_filename
def post_install():
"""Get the binaries online, and give them the execution permission"""
package_dir_bin = resource_filename('P', 'bin') # should be /home/user/tests/venv/lib/python3.4/site-package/P/bin/ …
Run Code Online (Sandbox Code Playgroud) 我有以下查询,我在wikidata 查询服务 Web 界面上运行:
SELECT ?objectLabel ?mass
WHERE {
?object wdt:P397 wd:Q525. # the object should have the sun as parent astronomical body
?object wdt:P31 ?status.
?object wdt:P2067 ?mass.
# Here are the accepted object status
VALUES ?status {wd:Q128207 wd:Q121750 wd:Q1319599}. # terrestrial planet, gas giant, ice giant
# automatically use the english label for ?xLabel variables
SERVICE wikibase:label { bd:serviceParam wikibase:language "en" }
}
Run Code Online (Sandbox Code Playgroud)
我发现质量值以特定单位给出,在地球的情况下为 yottagram。我怎样才能访问这些信息?
我尝试添加如下内容:
?mass wdt:P2237 ?mass_unit. …
Run Code Online (Sandbox Code Playgroud) 考虑以下 python 会话 (3.6.1):
>>> from itertools import islice
>>> l = [i for i in range(10)]
>>> islice(l, 0, 1)
<itertools.islice object at 0x7f87c9293638>
>>> (lambda it: islice(it, 0, 1))(l)
<itertools.islice object at 0x7fe35ab40408>
Run Code Online (Sandbox Code Playgroud)
这里没有什么是意外的。现在,与functools.partial
:
>>> from functools import partial
>>> partial(islice, 0, 1)(l)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: Stop argument for islice() must be None or an integer: 0 <= x <= sys.maxsize.
Run Code Online (Sandbox Code Playgroud)
partial
islice
似乎以一种非常意想不到的方式干扰行为。
这种行为背后的理由是什么?这是因为 islice 不处理关键字参数, …
我想在一个包内创建一个标记类型,描述一个2D离散空间,其大小由运行时间决定.(背景:生命游戏的实施)
我找到的第一种方法是通用性:
generic
Size : Natural;
package Worlds is
type World_Type is tagged private;
type World is access World_Type'Class;
subtype Coordinate is Positive range 1..Size;
private
type World_Array is array (Coordinate, Coordinate) of Boolean;
type World_Type is tagged record
Content : World_Array;
end record;
end Worlds;
Run Code Online (Sandbox Code Playgroud)
但是,在为世界实现访问者时,通用性成为一个大问题:
with Worlds;
package World_Visitors is
type World_Visitor_Type is tagged private;
type World_Visitor is access World_Visitor_Type'Class;
procedure Visite(v : World_Visitor_Type;
w : in out Worlds.World); -- ERROR: invalid prefix in selected component …
Run Code Online (Sandbox Code Playgroud) 目前正在学习常见的口齿不清,继Peter Seibel的Practical Common Lisp(我在第11章,关于收藏)之后,我很难理解setf
幕后的工作方式.
考虑这个表达式:
(setf a 10)
Run Code Online (Sandbox Code Playgroud)
我完全理解解释器如何(1)检索名为的变量a
,以及(2)更改它指向的值10
.
现在,我是特定集合的例子,例如列表,向量或散列表,setf也可用于更改集合包含的值.例如,使用向量:
(defparameter *x* '(a b c d))
(setf (elt *x* 1) bb)
Run Code Online (Sandbox Code Playgroud)
这让我怀疑setf
,因为它最终会找到非平凡的信息,或制造黑魔法.我看到了多种可能性.
该(elt *x* 1)
表达式返回'b
,因此setf
实际上被有工作(setf b bb)
.然后我不明白如何setf
推断*x*
它必须修改哪个对象(这里是列表),而不具有elt
保持它来自集合的指示的返回值,以及指向所述集合的指针.看似复杂.
这个想法就像setf
宏一样,它直接与它一起工作(setf (elt *x* 1) bb)
,因此可以提取elt *x* 1
部件来推断使用哪个对象/集合,因此必须进行修改.
它似乎不是非常有效,也不可靠,也不能抵抗复杂的操作.但是,因为我无法运行此代码:
(funcall (find-symbol (concatenate 'string "E" "LT")) *x* 1) ; -> B …
Run Code Online (Sandbox Code Playgroud) 如何将元组作为默认值放在函数中?
这些原型会引发编译错误:
void f(std::tuple<int, int>=std::tuple<int, int>(1, 1));
void f(std::tuple<int, int>=std::make_tuple(1, 1));
void f(std::tuple<int, int>=(1, 1));
Run Code Online (Sandbox Code Playgroud) 在我知道的所有Ada源代码中,包括标准库(抱歉,我不知道在网上找到它)或小游戏实现,所有非保留字都以大写字母开头.(最后,堆栈,索引,...)
因为所有保留的关键字都被编辑器突出显示,我猜/希望它不是用于区分用户定义的标识符.
在Python,C++或Java中,大写通常用于某些事物(通常是类标识符和常量),以允许它们被人类读者快速识别.(案例提供有关意义的信息)
为什么"官方"Ada代码以不同方式执行此操作?为什么不使用类型,模块之类的大写字母?
是因为通过信件案件的信息被认为是一件坏事吗?
如果是这样,为什么?
ada ×2
python ×2
c++ ×1
c++11 ×1
coding-style ×1
common-lisp ×1
generics ×1
lisp-macros ×1
packaging ×1
setf ×1
setuptools ×1
sparql ×1
triples ×1
triplestore ×1
tuples ×1
valueerror ×1
wikidata ×1