【问题标题】:Import a python module from within a packed module从打包模块中导入 python 模块
【发布时间】:2020-08-27 07:39:34
【问题描述】:

所以我builded a python packagelocaly:

cgi@cgires:~$ pip list | grep mads
madscgi                     0.1.0

真好!之后我可以在 Jupyter Notebook、iPython Shell、Python Shell 甚至 Python 脚本中使用它在模块代码之外。所以它在模块代码之外 100% 可以正常工作:

很好,但接下来我想将代码从一个构建模块(inside package)导入另一个 python 文件(inside package)。让我们将其命名为import_test.py 并尝试一下:

因此,如果它在构建包的目录中执行,则会失败。看起来,python interpreter 正在获取父目录(与模块一样具有同名)并且失败了。

是否可以强制使用已安装的 pip-package?

【问题讨论】:

  • 该描述并没有明确说明哪些模块正在尝试导入什么,以及这些模块之间的关系。请edit您的帖子提供一个最小的、可复制的示例作为可复制的文本,而不是图像。有文件/home/cgi/mads_remote/mads_pkg/mads_cons/mads_cons.py 吗?如果import_test.py 只是import mads_cons,那么mads_cons.__file__ 的值是多少?
  • @MisterMiyagi 你指出来了!我有一个 python 文件/home/cgi/mads_remote/mads_pkg/mads_cons/mads_cons.py。我将它重命名为 mads_connections.py 并且它可以工作 - 所以我以后永远不会在父目录和文件中使用相同的名称。
  • 你能创建一个简短的答案还是我应该?所以我们可以关闭它。

标签: python-3.x python-module python-packaging


【解决方案1】:

正如@MisterMiyagi 指出的那样,问题在于,有一个与模块同名的上层文件夹。

这里:mads_cons 是来自import_test.py 的上层文件夹。因此,将导入上层文件夹,而不是通过 pip 安装的模块。而已。

【讨论】:

    【解决方案2】:

    您要导入的文件应该在同一个文件夹中,或者以它的绝对路径引用。

    如果这不适合你,你可以调用 sys.path

    import sys
    
    sys.path
    

    您可以将文件保存在 sys.path 返回的任何目录中。

    如果你把文件保存在里面,那就更聪明了。

    ......../site-packages/

    【讨论】:

    • 代码已在正确的位置。这只是python导入模块/文件的方向问题
    猜你喜欢
    • 2016-07-30
    • 1970-01-01
    • 2012-12-24
    • 2020-06-22
    • 2019-07-31
    • 2017-10-05
    • 1970-01-01
    • 1970-01-01
    • 2020-01-30
    相关资源
    最近更新 更多