小编nbe*_*ben的帖子

git:osxkeychain凭证助手无声地记住用户名/密码

这个页面和许多相似的页面给出了使用git设置osxkeychain凭证助手的说明.我遵循了这些指示; 一切似乎都很好.我可以看到Keychain Access应用程序中的用户名和密码是正确的,git-credential-osxkeychain可以访问github.com记录.当我输入时,git config -l我可以看到该条目credential.helper=osxkeychain以及正确的user.name和user.email条目.当我跑步时,git credential-osxkeychain我看到我显然应该使用的用法消息.在任何时候我都不会收到错误消息.一切似乎都正确设置.

但是,无论我多少次git推送特定的存储库,它总是要求我的用户名和密码.输入我的Keychain Access条目中的用户名和密码有效; 所以它似乎不是登录问题.另外,当我输入git credential-osxkeychain erase(或git-credential-osxkeychain erase)时,命令会无声地挂起,就我所知,无限期.

到目前为止,我还没有找到任何记录此问题的内容.这个问题提出了类似的问题,但我的git版本是2.6.4,所以解决方案没有帮助.为什么这样做?如何让git用osxkeychain凭证助手记住我的用户名和密码?

我使用的是Mac OS X 10.11.4和git 2.6.4版.

git authentication macos credentials github

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

您可以在 C 扩展中安全地更改 Python 对象的类型吗?

问题

\n

假设我使用 C 扩展 API 实现了两种 Python 类型,并且这些类型是相同的(相同的数据布局/C struct),除了它们的名称和一些方法之外。假设所有方法都遵循数据布局,您可以在 C 函数中安全地将对象的类型从其中一种类型更改为另一种类型吗?

\n

值得注意的是,从 Python 3.9 开始,似乎有一个 function Py_SET_TYPE,但文档并不清楚是否/何时可以安全地执行此操作。我有兴趣了解如何安全地使用此函数以及在 3.9 版本之前是否可以安全地更改类型。

\n

动机

\n

我正在编写一个 Python C 扩展来实现持久哈希数组映射 Trie (PHAMT);如果它有用,源代码在这里(截至撰写本文时,它位于此提交)。我想添加的一个功能是能够从 PHAMT 创建瞬态哈希数组映射 Trie (THAMT)。THAMT 可以及时从 PHAMT 中产生O(1),并且可以有效地就地突变。重要的是,THAMT 与 PHAMT\xe2\x80\x94 具有完全相同的底层C 数据结构。PHAMT和 THAMT 之间的唯一真正区别是它们的 Python 类型封装的一些方法。这种通用结构允许人们在完成一组编辑后非常有效地将 THAMT 转换回 PHAMT。(当对 PHAMT 执行大量更新时,此模式通常会减少内存分配的数量)。

\n

实现从 THAMT 到 PHAMT 的转换的一种非常方便的方法是简单地将 THAMT 对象的类型指针从 THAMT 类型更改为 PHAMT 类型。我相信我可以编写安全地导航此更改的代码,但我可以想象这样做可能会破坏 Python 垃圾收集器。

\n

(需要明确的是:动机只是问题如何产生的背景。我不是在寻求实现动机中描述的结构的帮助, …

python types cpython python-c-api python-3.x

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

pythreejs无法在jupyter笔记本中渲染大网格(但成功渲染了一个小网格)

我一直在尝试使用pythreejs在jupyter笔记本中渲染3D对象。对于第一个测试,我使用四面体做了以下简单示例:

# Plot a mesh with pythreejs
import pythreejs as p3js
from IPython.display import display

vertices = [[0.3,0,0],[0,0.5,0.4],[-0.2,0.3,-0.1],[0.9,0,-0.3]]
faces = [[0,1,2],[1,2,3],[2,0,3],[0,1,3]]
colors = ['#ff0000','#00ff00','#0000ff','#ffffff']

faces = [f + [None, [colors[i] for i in f]] for f in faces]

geo = p3js.Geometry(vertices=vertices, faces=faces, colors=colors)
geo.exec_three_obj_method('computeFaceNormals')
mesh = p3js.Mesh(
   geometry=geo,
   material=p3js.MeshBasicMaterial(vertexColors='VertexColors',
                                   side='DoubleSide'),
   position=list(-np.mean(vertices, axis=0)))
cam = p3js.PerspectiveCamera(position=[4,0,0], up=[0,0,1], fov=10)
scene = p3js.Scene(
    children=[mesh, cam, p3js.AmbientLight(color=u'0x777777')],
    background='black')
renderer = p3js.Renderer(camera=cam, scene=scene,
                         controls=[p3js.OrbitControls(controlling=cam)])
display(renderer)
Run Code Online (Sandbox Code Playgroud)

当我在jupyter笔记本(Python 3.6.6,pythreejs版本1.1.0)中对上述内容进行评估时,我得到的期望值或多或少:黑色背景带有看起来很滑稽的四面体,其顶点具有不同的颜色。大!所以我尝试了一个更复杂的网格。我已经将这个网格的数据以gzipped-hdf5格式上传到文件放置器中,此处;您可以下载它,将其压缩,然后使用以下代码阅读:

# load the mesh
import h5py …
Run Code Online (Sandbox Code Playgroud)

python mesh three.js jupyter-notebook

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

有条件地在 docker-compose 中挂载卷以适应多种情况

我使用 docker 和 docker compose 将科学工具打包成易于/通用的可执行模块。一个例子是一个 docker,它将一个相当复杂的 python 库打包到一个运行 jupyter notebook 服务器的容器中;这个想法是,其他不太精通技术的科学家可以克隆一个 github 存储库,运行docker-compose up然后进行分析,而无需安装库、配置各种插件和其他依赖项等。

我让这一切工作正常,只是我在让卷安装以连贯的方式工作时遇到问题。这样做的原因是 docker 容器内的库处理多种数据集,用户将这些数据集存储在几个单独的目录中,这些目录通常通过 shell 环境变量进行跟踪。(请不要告诉我这是一个糟糕的方法——这是在现场做事的方式,而不是我选择的做事方式。)因此,例如,如果用户存储 FreeSurfer 数据,它们将有一个名为 SUBJECTS_DIR 的环境变量,指向包含数据的目录;如果他们存储 HCP 数据,他们将有一个环境变量 HCP_SUBJECTS_DIR。但是,他们可能同时拥有这些集合,或者两者都没有(以及其他一些)。

我希望能够在我的 docker-compose.yml 文件中放置类似的内容以处理这些情况:

version: '3'
services:
   my_fancy_library:
      build: .
      ports:
         - "8080:8888"
      environment:
         - HCP_SUBJECTS_DIR="/hcp_subjects"
         - SUBJECTS_DIR="/freesurfer_subjects"
      volumes:
         - "$SUBJECTS_DIR:/freesurfer_subjects"
         - "$HCP_SUBJECTS_DIR:/hcp_subjects"
Run Code Online (Sandbox Code Playgroud)

在对此进行测试时,如果用户设置了两个环境变量,则一切正常。但是,如果他们没有这些设置中的一个,我会收到一个关于不安装长度少于 2 个字符的目录的错误(我认为这是对安装由“:/hcp_subjects”指定的卷的抱怨)。

这个问题问的基本相同,答案指向这里,如果我理解正确的话,它基本上解释了如何以某种方式解决多个 docker-compose 文件。由于以下几个原因,这对于我的案例来说并不是一个真正可行的解决方案:

  • 这个工具是为那些不一定了解 docker、docker-compose 或相关实用程序的人设计的,所以期望他们编写/编辑自己的 docker-compose.yml 文件是一个问题
  • 这些目录不止两个(我已经展示了两个作为示例),我实际上无法为这些已声明或未声明的路径的每个可能组合制作一个 docker-compose 文件
  • 老实说,考虑到所需的信息就在 docker-compose 已经读取的变量中,这个解决方案看起来真的很笨拙。

我能够想出的唯一体面的解决方案是要求用户运行脚本./run.sh而不是docker-compose up; 该脚本检查环境变量,docker-compose.yml用适当的卷写出自己的文件,然后 …

configuration volumes docker dockerfile docker-compose

5
推荐指数
2
解决办法
2722
查看次数

如何从Julia中的Ref继承

我一直在学习Julia,并且想花一些时间通过在语言中添加一些我最喜欢的功能/不变结构来进行尝试。特别是:用于延迟计算和承诺的类型,例如clojure的延迟和承诺类型。

延迟和承诺在原则上都Ref{T}与警告类似,(1)obj[]在返回obj承诺或延迟时可能需要等待一个值或运行计算,然后(2)延迟/承诺只能设置一次,并且永远在设置之前读取,因此是不可变的(至少,其接口是不可变对象的接口)。

我的直觉是,延迟和承诺都应该继承自抽象的不可变ref类型,因为这部分行为至少是相似的。但是,我似乎无法做到这一点:

abstract type ImmutableRef <: Ref end
Run Code Online (Sandbox Code Playgroud)

ImmutableRef定义中的无效子类型

在仔细浏览了Julia的源代码之后,似乎该Ref类型不是以一种典型的方式声明的,而是在Julia的核心C代码中声明的。是否可以从Julia中的Ref继承?如果没有,那么实现/组织这类类似ref的类型的惯用Julia方法是什么?

julia

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