Jas*_*ker 13 python import module
例如,我想为另一个项目制作一个sql alchemy插件.我想将该模块命名为sqlalchemy.py.这个问题是它阻止我导入sqlalchemy:
#sqlalchemy.py
import sqlalchemy
Run Code Online (Sandbox Code Playgroud)
这将使模块自行导入.我试过这个,但它似乎不起作用:
import sys
#Remove the current directory from the front of sys.path
if not sys.path[0]:
sys.path.pop(0)
import sqlalchemy
Run Code Online (Sandbox Code Playgroud)
有什么建议?
Ale*_*lli 12
编辑:由于OP现在提到该问题是相对导入优先于绝对的问题,因此OP特定问题的最简单解决方案是在模块的开头添加from __future__ import absolute_import更改"首选项"/排序.
以下仍然适用于两个冲突绝对导入的棘手问题(这似乎不是OP目前面临的......):
一旦你导入了一个名为的模块x,那个模块记录在sys.modules['x']你正在做的改变sys.path中就不会改变sys.modules.您还需要直接更改sys.modules.
例如,考虑:
$ cat a/foo.py
print __file__; import sys; sys.path.insert(0, "b"); del sys.modules["foo"]; import foo
$ cat b/foo.py
print __file__
$ python2.5 -c'import sys; sys.path.insert(0, "a"); import foo'
a/foo.py
b/foo.py
Run Code Online (Sandbox Code Playgroud)
(再次运行将使用并显示.pyc文件,而不是.py文件).
不是最干净的方法,当然这种方式原来的foo模块不可避免地无法从外部访问(因为它的sys.modules条目已被替换),但你可以根据需要进行更加脆弱的技巧(藏sys.modules["foo"]在之前的某个地方)删除它,导入其他foo后将该模块放在其他地方并恢复原始sys.modules["foo"]- 等等),具体取决于您的确切需要.(当然,首先避免名称冲突几乎总是比以这种方式在周围跳华尔兹更简单;-).
| 归档时间: |
|
| 查看次数: |
3884 次 |
| 最近记录: |