我有一个名为的模块extended.py,其中包含以下行:
from .basic import BasicModule
Run Code Online (Sandbox Code Playgroud)
并且该文件与此目录basic.py位于同一目录中__init__.py.但是,当我尝试运行它时:
python extended.py
Run Code Online (Sandbox Code Playgroud)
我收到错误:
ValueError: Attempted relative import in non-package
Run Code Online (Sandbox Code Playgroud)
还添加了这一行:
from __future__ import absolute_import
Run Code Online (Sandbox Code Playgroud)
没有解决问题.也许我太累了,看不到明显的 - 但我没有看到这里的问题.
这是一个python新手问题:
我有以下目录结构:
test
-- test_file.py
a
-- b
-- module.py
Run Code Online (Sandbox Code Playgroud)
其中test,a和b是文件夹.双方test并a都在同一水平上.
module.py有一个名为的类shape,我想在test_file.py中实例化它的一个实例.我怎么能这样做?
我试过了:
from a.b import module
Run Code Online (Sandbox Code Playgroud)
但我得到了:
ImportError: No module named a.b
Run Code Online (Sandbox Code Playgroud) 在Python中使用相对导入有一个缺点,您将无法再将模块作为独立模块运行,因为您将获得异常: ValueError: Attempted relative import in non-package
# /test.py: just a sample file importing foo module
import foo
...
# /foo/foo.py:
from . import bar
...
if __name__ == "__main__":
pass
# /foo/bar.py: a submodule of foo, used by foo.py
from . import foo
...
if __name__ == "__main__":
pass
Run Code Online (Sandbox Code Playgroud)
我应该如何修改样本代码,以便能够执行所有:test.py,foo.py和bar.py
我正在寻找一个适用于python 2.6+(包括3.x)的解决方案.
这实际上只是一个"最佳实践"问题......
我发现在开发应用程序时,我经常会得到很多观点.
通常的做法是将这些视图分解为多个视图文件吗?换句话说......而不仅仅是拥有views.py,是否常见于views_1.py,views_2.py,views_3.py(但更合适,可能按类别命名)?
我正在改变一堆旧的python代码,偶尔会遇到包之间的名称冲突.我有一个关于何时应该使用绝对导入以及是否适合仅按名称导入同级模块的问题.
/package/
/package/__init__.py
/package/subA
/package/subA/__init__.py
/package/subA/moduleA.py
/package/subA/moduleB.py
/package/subB
/package/subB/__init__.py
/package/subB/moduleA.py
/package/subB/moduleB.py
Run Code Online (Sandbox Code Playgroud)
包中的每个import语句应该是这样的:
import package.subX.moduleX
Run Code Online (Sandbox Code Playgroud)
要么
from package.subX import moduleX
Run Code Online (Sandbox Code Playgroud)
在子包__init__.py文件中怎么样?简单地说是不对的
import moduleA
import moduleB
Run Code Online (Sandbox Code Playgroud)
或者,在/package/subA/moduleA.py中,简单地放入是不对的:
import moduleB
Run Code Online (Sandbox Code Playgroud) 我有一个项目,我想在其他目录中使用一些python类.
结构示例:
/dir
+../subdirA
+../subdirB
+../mydir
Run Code Online (Sandbox Code Playgroud)
绝对路径不同,因为该项目在不同的机器上运行.
执行位于/ mydir中的MySampleClass的 python文件时,如何导入位于/ subdirA中的/ dir或OtherClassA中的OtherClassRoot?
我尝试过这样的事情:
from . import MySampleClass as msc
Run Code Online (Sandbox Code Playgroud)
要么
from ../ import MySampleClass as msc
Run Code Online (Sandbox Code Playgroud)
但这总是失败或给我错误消息,如非包装中尝试相对导入
那么,什么是相对导入python文件的正确方法?
任何输入都非常感谢:)
好的,这个场景非常简单.我有这个文件结构:
.
??? interface.py
??? pkg
? ??? __init__.py
? ??? mod1.py
? ??? mod2.py
Run Code Online (Sandbox Code Playgroud)
现在,这些是我的条件:
因此,在Python 2,我只想做import mod1内部mod2.py两者python2 mod2.py并python2 interface.py预期会工作.
但是,如果我这样做,这是我不太了解的部分,使用Python 3.5.2 import mod1; 然后我可以做python3 mod2.py,但python3 interface.py抛出:ImportError: No module named 'mod1':(
所以,显然,python 3建议import pkg.mod1用来避免与内置模块的冲突.好的,如果我使用我可以做的python3 interface.py; 但后来我不能python3 mod2.py因为:ImportError: No module named 'pkg'
同样,如果我使用相对导入:
from . import mod1然后python3 interface.py工作; 但mod2.py说SystemError: Parent module '' not loaded, …
有没有其他选择可以防止在python中导入模块时键入重复的长路径。
当前代码:
from a.b.c.d.e.f.g import g1
from a.b.c.d.e.f.g import g2
from a.b.c.d.e.f.g.h import h1
from a.b.c.d.e.f.g.i import i1
Run Code Online (Sandbox Code Playgroud)
我尝试了以下代码:
ref_path = a.b.c.d.e.f.g
from ref_path import g1
from ref_path import g2
from ref_path.h import h1
from ref_path.i import i1
Run Code Online (Sandbox Code Playgroud)
但是不幸的是它没有用。我不能这样做,a.b.c.d.e.f.g import *因为中可能有太多模块ref_path。
如果我能够做到这一点,我可以轻松地ref_paths从一个公共位置维护在不同模块中使用的不同公共资源。
假设有一个文件夹'/ home/user/temp/a40bd22344'.该名称是完全随机的,并且每次迭代都会发生变化.我需要能够使用固定名称在Python中导入此文件夹,比如'project'.我知道我可以将此文件夹添加到sys.path以启用导入查找,但有没有办法用'project'替换'a40bd22344'?
也许在init .py中有一些聪明的黑客攻击?
添加:
它需要是全局的 - 也就是说,其他脚本通过标准加载'project':
import project
Run Code Online (Sandbox Code Playgroud)
必须正常工作,而是加载a40bd22344.
我知道这已被多次询问,但不知怎的,我无法克服这个错误.这是我的目录结构 -
project/
pkg/
__init__.py
subpackage1/
script1.py
__init__.py
subpackage2/
script2.py
__init__.py
Run Code Online (Sandbox Code Playgroud)
script2.py有:
class myclass:
def myfunction:
Run Code Online (Sandbox Code Playgroud)
script1.py有
from ..subpackage2 import script2
Run Code Online (Sandbox Code Playgroud)
我也试过了
from ..subpackage2 import myclass
Run Code Online (Sandbox Code Playgroud)
这给了我:ValueError:在非包中尝试相对导入
任何帮助将非常感激.
python ×8
import ×4
package ×2
python-3.x ×2
django ×1
django-views ×1
module ×1
packages ×1
path ×1
python-2.7 ×1