小编alu*_*iak的帖子

如何使用 setuptools 和 pkg_ressources 获取安装目录

我正在处理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)

python packaging setuptools pkg-resources

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

访问属性的属性

我有以下查询,我在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)

sparql triplestore triples wikidata

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

itertools.islice 与 functools.partial 一起使用时会引发 ValueError

考虑以下 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)

partialislice似乎以一种非常意想不到的方式干扰行为。

这种行为背后的理由是什么?这是因为 islice 不处理关键字参数, …

python valueerror

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

Ada:具有可变大小的数组属性的对象

我想在一个包内创建一个标记类型,描述一个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)

generics ada dynamic-arrays

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

setf如何在引擎盖下工作?

目前正在学习常见的口齿不清,继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,因为它最终会找到非平凡的信息,或制造黑魔法.我看到了多种可能性.

1. setf是一个函数

(elt *x* 1)表达式返回'b,因此setf实际上被有工作(setf b bb).然后我不明白如何setf推断*x*它必须修改哪个对象(这里是列表),而不具有elt保持它来自集合的指示的返回值,以及指向所述集合的指针.看似复杂.

2. setf是一个宏

这个想法就像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)

common-lisp setf lisp-macros

3
推荐指数
2
解决办法
511
查看次数

元组作为函数参数的默认值

如何将元组作为默认值放在函数中?

这些原型会引发编译错误:

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)

c++ tuples default-value c++11

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

为什么所有用户定义的标识符都以大写字母开头?

在我知道的所有Ada源代码中,包括标准库(抱歉,我不知道在网上找到它)或小游戏实现,所有非保留字都以大写字母开头.(最后,堆栈,索引,...)
因为所有保留的关键字都被编辑器突出显示,我猜/希望它不是用于区分用户定义的标识符.

在Python,C++或Java中,大写通常用于某些事物(通常是类标识符和常量),以允许它们被人类读者快速识别.(案例提供有关意义的信息)

为什么"官方"Ada代码以不同方式执行此操作?为什么不使用类型,模块之类的大写字母?

是因为通过信件案件的信息被认为是一件坏事吗?
如果是这样,为什么?

coding-style ada

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