相关疑难解决方法(0)

从不同的文件夹导入文件

我有以下文件夹结构.

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-import importerror

1186
推荐指数
28
解决办法
121万
查看次数

给定完整路径如何导入模块?

如何在完整路径下加载Python模块?请注意,该文件可以位于文件系统中的任何位置,因为它是一个配置选项.

python configuration python-module python-import

1022
推荐指数
18
解决办法
80万
查看次数

从相对路径导入模块

如何根据相对路径导入Python模块?

例如,如果dirFoo包含Foo.pydirBar,和dirBar包含Bar.py,我怎么导入Bar.pyFoo.py

这是一个直观的表示:

dirFoo\
    Foo.py
    dirBar\
        Bar.py
Run Code Online (Sandbox Code Playgroud)

Foo希望包括Bar,但重组文件夹层次结构不是一种选择.

python relative-path python-import

749
推荐指数
16
解决办法
88万
查看次数

超出相对导入中的顶级包错误

看来这里已经有一些关于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.导致此错误消息的原因是什么?

python import package

238
推荐指数
12
解决办法
18万
查看次数

ModuleNotFoundError:__main__不是包是什么意思?

我试图从控制台运行一个模块.我的目录结构是这样的:

在此输入图像描述

我正在尝试运行模块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)

python module python-import python-3.6

161
推荐指数
5
解决办法
19万
查看次数

从Python中的相对路径导入

我有一个用于我的客户端代码的文件夹,一个用于我的服务器代码的文件夹,以及一个用于它们之间共享的代码的文件夹

Proj/
    Client/
        Client.py
    Server/
        Server.py
    Common/
        __init__.py
        Common.py
Run Code Online (Sandbox Code Playgroud)

如何从Server.py和Client.py导入Common.py?

python import relative-path shared-libraries python-3.x

86
推荐指数
5
解决办法
12万
查看次数

Python中的循环导入依赖项

假设我有以下目录结构:

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

如何解决这个问题呢?

python dependencies circular-dependency python-import

72
推荐指数
4
解决办法
6万
查看次数

用于相对进口的python包装

首先关闭所有:对不起,我知道有很多关于相关进口的问题,但我没有找到解决方案.如果可能,我想使用以下目录布局:

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吗?

python python-import

70
推荐指数
3
解决办法
6万
查看次数

Python - 在同一个包中的模块中导入包

我有一个像这样的项目结构......

/some_app
    build/
    README
    out.py
    some_app/
        __init__.py
        mod1.py
        mod2.py
Run Code Online (Sandbox Code Playgroud)

现在我想导入some_appmod2,而不是搞乱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

相关链接

python

31
推荐指数
1
解决办法
5万
查看次数

如何从其他目录导入.py文件?

我有这种文件结构(目录和箭头文件后):

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 python-import openerp

30
推荐指数
2
解决办法
13万
查看次数