小编rok*_*ngh的帖子

python import package - 子包不应该出现在符号表中

我想知道为什么在导入包时,python包中包含子模块的目录(子包)会显示为符号.例如,如果我有这个包:

PyModTest/                        Top-level package
          __init__.py             Initialize the package
          Source/                 Subpackage holding source files
                 __init__.py
                 WildMod.py        Submodule containing a function: 'WildFunc'
Run Code Online (Sandbox Code Playgroud)

顶级__init__.py看起来像这样:

#!/usr/bin/env python

from Source.WildMod import WildFunc
Run Code Online (Sandbox Code Playgroud)

并且,为了完整起见,下级__init__.py看起来像这样:

#!/usr/bin/env python

__all__ = ["WildMod"]
Run Code Online (Sandbox Code Playgroud)

好的,现在我打开解释器,导入模块,然后查看符号:

>>> import PyModTest
>>> dir(PyModTest)
['Source', 'WildFunc', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__']
Run Code Online (Sandbox Code Playgroud)

看,"源"模块出现了,即使我从未专门导入它!

我想看到的唯一符号(除了私有符号)是我的'WildFunc'.有没有办法隐藏'Source'包?

python

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

返回结构时带有ctypes的Segfault - 32位linux

所以我在32位Linux机器上从ctypes获得了一个段错误,我无法在64位darwin或linux上重现.

这是C:

typedef struct {
  void *ptr;
  } doodle;

doodle C_intpointerfunction(int *a)
{
  *a = 41;
  doodle foo;
  foo.ptr = a;
  return foo;
}
Run Code Online (Sandbox Code Playgroud)

编译时使用:

gcc -c intpointerlibrary.c
gcc -shared intpointerlibrary.o -o libintpointerlib.so
Run Code Online (Sandbox Code Playgroud)

这是Python:

import numpy as N
from ctypes import *

_libintpointer = N.ctypeslib.load_library('libintpointerlib.so','.')

_libintpointer.C_intpointerfunction.restype = c_void_p
_libintpointer.C_intpointerfunction.argtypes = [POINTER(c_int)]
def P_intpointerfunction():
  lrc = c_int(0)
  print "lrc before (should be 0) = "+str(lrc.value)
  return_val = _libintpointer.C_intpointerfunction(byref(lrc))
  print "lrc after (should be 41) = "+str(lrc.value)
  return return_val
Run Code Online (Sandbox Code Playgroud)

所以现在,当我调用这个函数时:

  rc = …
Run Code Online (Sandbox Code Playgroud)

python linux ctypes

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

标签 统计

python ×2

ctypes ×1

linux ×1