我有以下文件夹结构.
application/app/folder/file.py
我想从另一个驻留的Python文件中的file.py中导入一些函数
application/app2/some_folder/some_file.py
我试过了
from application.app.folder.file import func_name
和其他一些尝试,但到目前为止我无法正确导入.我怎样才能做到这一点?
如何在完整路径下加载Python模块?请注意,该文件可以位于文件系统中的任何位置,因为它是一个配置选项.
如何根据相对路径导入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,但重组文件夹层次结构不是一种选择.
看来这里已经有一些关于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.导致此错误消息的原因是什么?
我试图从控制台运行一个模块.我的目录结构是这样的:
我正在尝试运行模块p_03_using_bisection_search.py,从problem_set_02目录使用:
$ python3 p_03_using_bisection_search.py
Run Code Online (Sandbox Code Playgroud)
里面的代码p_03_using_bisection_search.py是:
__author__ = 'm'
from .p_02_paying_debt_off_in_a_year import compute_balance_after
def compute_bounds(balance: float,
annual_interest_rate: float) -> (float, float):
# there is code here, but I have omitted it to save space
pass
def compute_lowest_payment(balance: float,
annual_interest_rate: float) -> float:
# there is code here, but I have omitted it to save space
pass
def main():
balance = eval(input('Enter the initial balance: '))
annual_interest_rate = eval(input('Enter the annual interest rate: '))
lowest_payment …Run Code Online (Sandbox Code Playgroud) 我有一个用于我的客户端代码的文件夹,一个用于我的服务器代码的文件夹,以及一个用于它们之间共享的代码的文件夹
Proj/
Client/
Client.py
Server/
Server.py
Common/
__init__.py
Common.py
Run Code Online (Sandbox Code Playgroud)
如何从Server.py和Client.py导入Common.py?
假设我有以下目录结构:
a\
__init__.py
b\
__init__.py
c\
__init__.py
c_file.py
d\
__init__.py
d_file.py
Run Code Online (Sandbox Code Playgroud)
在a包中__init__.py,c导入包.但是c_file.py进口a.b.d.
程序失败,说尝试导入b时不存在.(它确实不存在,因为我们正在进口它.)c_file.pya.b.d
如何解决这个问题呢?
首先关闭所有:对不起,我知道有很多关于相关进口的问题,但我没有找到解决方案.如果可能,我想使用以下目录布局:
myClass/
__init__.py
test/
demo.py
benchmark.py
specs.py
src/
__init__.py
myClass.py
Run Code Online (Sandbox Code Playgroud)
现在我的问题是:
包中的测试文件如何正确导入myClass.py?
如果你将libC/myClass中的myClass作为子模块或者包含/ myClass,你将如何从外部导入包?
到目前为止,我找不到一个优雅的解决方案.根据我的理解,Guido的决定应该可以做,from ..src import myClass但这会出错:
ValueError: Attempted relative import in non-package
看起来它不会将myClass视为包.阅读文档:
需要__init__.py文件才能使Python将目录视为包含包;
我似乎缺少一些指定包的脚本的东西,我应该使用.pth吗?
我有一个像这样的项目结构......
/some_app
build/
README
out.py
some_app/
__init__.py
mod1.py
mod2.py
Run Code Online (Sandbox Code Playgroud)
现在我想导入some_app包mod2,而不是搞乱sys.path诡计.我只是做了......
# mod2.py
import some_app
Run Code Online (Sandbox Code Playgroud)
现在,当我从命令行运行mod2.py时
some_app $ python mod2.py
Run Code Online (Sandbox Code Playgroud)
它会引发错误 ImportError: No module named some_app
但是,在out.py文件内部,当我这样做时
# out.py
import some_app.mod2
Run Code Online (Sandbox Code Playgroud)
然后呢
some_app $ python out.py
Run Code Online (Sandbox Code Playgroud)
它完美运行.
因此,正在发生的事情就是这样.我在一个模块中加载一个包在同一个包中,然后将该模块作为__main__文件运行- 它不起作用.接下来,我__main__在另一个模块中加载相同的模块(我运行的模块),然后运行另一个模块__main__- 它可以工作.
有人可以详细说明这里发生了什么吗?
UPDATE
我知道没有直接的理由这样做 - 因为我可以直接导入some_app包内的任何模块.我之所以这样做是因为,在Django项目中,这就是他们正在做的事情.例如,请参阅此文件
在每个模块中,所有非标准导入都以django..所以我想知道他们为什么以及如何做到这一点.
更新2
相关链接
我有这种文件结构(目录和箭头文件后):
model -> py_file.py
report -> other_py_file.py
Run Code Online (Sandbox Code Playgroud)
主要__init__.py:
import model
import report
Run Code Online (Sandbox Code Playgroud)
型号目录:
import py_file
Run Code Online (Sandbox Code Playgroud)
报告目录:
import other_py_file
Run Code Online (Sandbox Code Playgroud)
现在在other_py_file我想要导入py_file,但是我尝试了什么,我给出错误,没有这样的模块.
我试过这个:
from model import py_file
然后:
import py_file
看起来这两个文件夹看不到对方.从其他目录导入文件的方法是什么?我是否需要在init .py文件中指定一些额外的导入?
python ×10
import ×2
dependencies ×1
importerror ×1
module ×1
openerp ×1
package ×1
python-3.6 ×1
python-3.x ×1