python好多模块和c相识_Python-Cext名称空间与常规Python子模块混合?
這個問題有點類似于:
只是稍微扭動一下。這里我并不是要混合兩個C-ext,而是一個C-ext和一個常規的python子模塊。在
有沒有辦法讓C擴展在符號之間共享模塊命名空間“模塊“子模塊中的那些呢?在
我的模塊結構如下:facs/
facs/
__init__.py
setup.py
facs.so
[*.c files]
utils/
__init__.py
galaxy.py
如果從層次結構中刪除“utils”,則可以導入fac并查看facs.so方法:
^{pr2}$
但是當我放回utils子模塊并嘗試導入不同的部分時,一個名稱空間似乎屏蔽了另一個名稱空間(utils屏蔽了facs.so導出的符號):>>> import facs
>>> dir(facs)
['__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__']
>>> import facs.utils
>>> facs.utils.galaxy.rsync_genomes("phix")
Traceback (most recent call last):
File "", line 1, in
AttributeError: 'module' object has no attribute 'galaxy'
>>> from facs.utils import galaxy
>>> galaxy.rsync_genomes("phix")
'Hello world'
如您所見,在dir(facs)、build、query和{}之后,galaxy都消失了
除非我改為執行from facs.utils import galaxy,否則無法正確導入
重新使用初始import語句并直接通過facs.utils.galaxy.rsync_genomes()進行訪問。在
總而言之,我對本模塊的預期用途是:>>> import facs
>>> dir(facs)
['__doc__', '__file__', '__name__', '__package__', 'build', 'query', 'remove'
, 'utils']
>>> facs.utils.galaxy.rsync_genomes("phix")
'Hello world'
(目前正在開發中)代碼位于:
萬一有人想自己試試。我用的是virtualenvs和我的$PYTHONPATH
似乎正確:/home/roman/.venvburrito/lib/python:
/home/roman/.virtualenvs/py27/lib/python2.7/site-packages
安裝似乎也很成功:cd ~/.virtualenvs/py27/lib/python2.7/site-packages/facs-2.0dev-py2.7.egg/
(py27)$ ls
EGG-INFO facs.py facs.pyc facs.so utils/
似乎沒有__init__.py文件實際被復制到頂層目錄,但是在那里觸摸或不觸摸它并不影響上面描述的導入行為。在
有什么想法嗎?提前謝謝!在
總結
以上是生活随笔為你收集整理的python好多模块和c相识_Python-Cext名称空间与常规Python子模块混合?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python费用结算系统_python
- 下一篇: unity 删除子节点_【Unity文档