我有以下文件夹结构.
application/app/folder/file.py
我想从另一个驻留的Python文件中的file.py中导入一些函数
application/app2/some_folder/some_file.py
我试过了
from application.app.folder.file import func_name
和其他一些尝试,但到目前为止我无法正确导入.我怎样才能做到这一点?
如何根据相对路径导入Python模块?
例如,如果dirFoo包含Foo.py和dirBar,和dirBar包含Bar.py,我怎么导入Bar.py到Foo.py?
这是一个直观的表示:
dirFoo\
Foo.py
dirBar\
Bar.py
Run Code Online (Sandbox Code Playgroud)
Foo希望包括Bar,但重组文件夹层次结构不是一种选择.
我想从同一目录中的另一个文件导入一个函数.
有时它适用于我,from .mymodule import myfunction但有时我会得到:
SystemError: Parent module '' not loaded, cannot perform relative import
Run Code Online (Sandbox Code Playgroud)
有时它适用from mymodule import myfunction,但有时我也得到:
SystemError: Parent module '' not loaded, cannot perform relative import
Run Code Online (Sandbox Code Playgroud)
我不明白这里的逻辑,我找不到任何解释.这看起来完全随机.
有人可以向我解释这一切背后的逻辑是什么吗?
我有一个存储所有.py文件的目录.
bin/
main.py
user.py # where class User resides
dir.py # where class Dir resides
Run Code Online (Sandbox Code Playgroud)
我想在main.py中使用user.py和dir.py中的类.
如何将这些Python类导入main.py?
此外,User如果user.py位于子目录中,如何导入类?
bin/
dir.py
main.py
usr/
user.py
Run Code Online (Sandbox Code Playgroud) 我来过这里:
还有很多我没有复制的网址,有些在SO上,有些在其他网站上,当我认为我有快速解决方案的时候.
永远反复出现的问题是:使用Windows 7,32位Python 2.7.3,如何解决这个"非包装中尝试相对导入"的消息?我在pep-0328上构建了一个包的精确副本:
package/
__init__.py
subpackage1/
__init__.py
moduleX.py
moduleY.py
subpackage2/
__init__.py
moduleZ.py
moduleA.py
Run Code Online (Sandbox Code Playgroud)
我确实在适当的模块中创建了名为spam和eggs的函数.当然,它没有用.答案显然在我列出的第4个网址中,但这对我来说都是校友.我访问过的其中一个网址上有此回复:
相对导入使用模块的name属性来确定模块在包层次结构中的位置.如果模块的名称不包含任何包信息(例如,它设置为'main'),则解析相对导入,就像模块是顶级模块一样,无论模块实际位于文件系统的哪个位置.
上面的反应看起来很有希望,但它对我来说都是象形文字.所以我的问题是,如何让Python不回归"尝试非包装中的相对导入"?有一个答案涉及-m,据说.
有人可以告诉我为什么Python会给出错误信息,非包装意味着什么!,为什么以及如何定义"包裹",并且准确的答案足以让幼儿园儿童理解.
编辑:导入是从控制台完成的.
我正在运行Python 2.5.
这是我的文件夹树:
ptdraft/
nib.py
simulations/
life/
life.py
Run Code Online (Sandbox Code Playgroud)
(我也在__init__.py每个文件夹中,为了便于阅读,这里省略了)
如何nib从模块内导入life模块?我希望有可能不用修补sys.path.
注意:正在运行的主模块位于该ptdraft文件夹中.
看来这里已经有一些关于python 3中相对导入的问题了,但是在经历了很多这些问题后,我仍然找不到我的问题的答案.所以这是问题所在.
我有一个如下所示的包裹
package/
__init__.py
A/
__init__.py
foo.py
test_A/
__init__.py
test.py
Run Code Online (Sandbox Code Playgroud)
我在test.py中有一行:
from ..A import foo
Run Code Online (Sandbox Code Playgroud)
现在,我在文件夹中package,我跑了
python -m test_A.test
Run Code Online (Sandbox Code Playgroud)
我收到了消息
"ValueError: attempted relative import beyond top-level package"
Run Code Online (Sandbox Code Playgroud)
但如果我在父文件夹中package,例如,我运行:
cd ..
python -m package.test_A.test
Run Code Online (Sandbox Code Playgroud)
一切都好.
现在我的问题是:
当我在文件夹中时package,我在test_A子包中运行模块test_A.test,根据我的理解,..A只上升一个级别,它仍然在package文件夹中,为什么它给出了消息说beyond top-level package.导致此错误消息的原因是什么?
我在一个名为的文件中定义了一个类Object.py.当我尝试从另一个文件中继承此类时,调用构造函数会引发异常:
TypeError: module.__init__() takes at most 2 arguments (3 given)
Run Code Online (Sandbox Code Playgroud)
这是我的代码:
import Object
class Visitor(Object):
pass
instance = Visitor() # this line throws the exception
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
我有以下目录:
myProgram
??? app
??? __init__.py
??? main.py
??? mymodule.py
Run Code Online (Sandbox Code Playgroud)
mymodule.py:
class myclass(object):
def __init__(self):
pass
def myfunc(self):
print("Hello!")
Run Code Online (Sandbox Code Playgroud)
main.py:
from .mymodule import myclass
print("Test")
testclass = myclass()
testclass.myfunc()
Run Code Online (Sandbox Code Playgroud)
但是当我运行它时,我得到了这个错误:
Traceback (most recent call last):
File "D:/Users/Myname/Documents/PycharmProjects/myProgram/app/main.py", line 1, in <module>
from .mymodule import myclass
SystemError: Parent module '' not loaded, cannot perform relative import
Run Code Online (Sandbox Code Playgroud)
这有效:
from mymodule import myclass
Run Code Online (Sandbox Code Playgroud)
但是当我输入时,我没有自动完成,并且有一条消息:"未解析的引用:mymodule"和"未解析的引用:myclass".在我正在处理的其他项目中,我收到错误:"ImportError:没有名为'mymodule'的模块.
我能做什么?
我已经经历了许多Python相关的导入问题,但我无法理解这个问题/让它工作......
我的目录结构是:
Driver.py
A/
Account.py
__init__.py
B/
Test.py
__init__.py
Run Code Online (Sandbox Code Playgroud)
====================
Driver.py
from B import Test
Run Code Online (Sandbox Code Playgroud)
=========
Account.py
class Account:
def __init__(self):
self.money = 0
Run Code Online (Sandbox Code Playgroud)
====================
Test.py
from ..A import Account
Run Code Online (Sandbox Code Playgroud)
==================
当我试图跑
python Driver.py
我收到了错误
Traceback(最近一次调用最后一次):
来自B进口测试
Driver.py从..A导入帐户输入"B/Test.py",第1行ValueError:尝试相对导入超出toplevel包
python ×10
import ×3
python-3.x ×3
module ×2
directory ×1
importerror ×1
package ×1
path ×1
python-2.7 ×1