【问题标题】:import a module up two and down one directory in Python package在 Python 包中上两下一个目录导入一个模块
【发布时间】:2017-06-17 07:19:19
【问题描述】:

我想将一个名为mymodule 的模块加载到我的文件系统中上两个目录和下一个目录中。我用过的其他地方

import sys
sys.path.append('../mydirectory')
import mymodule # in mydirectory

为了上一个,然后下一个目录(在一个包中)来抓取一个模块,所以我希望这样可以工作:

import sys
sys.path.append('../../mydirectory')
import mymodule

但是,我收到了ModuleNotFoundError: "No module named 'mymodule'"。我很困惑,因为我在我拥有上一个(工作)程序的目录的下一个目录中运行它。 (我尝试添加__init__.py,但没有帮助。)有谁知道为什么这不起作用?有什么建议吗?

【问题讨论】:

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


    【解决方案1】:

    这是我的首选方法:

    import sys
    from pathlib import Path
    
    HERE = Path(__file__).parent
    
    sys.path.append(str(HERE / '../../mydirectory'))
    

    使用 __file__ 我不依赖当前工作目录作为相对路径的起点 - HERE 是当前文件所在的目录。

    当然你不必使用pathlib module

    【讨论】:

    • 效果很好,谢谢! :) 仍然有点好奇我是否觉得我尝试的东西应该“从道德上说”有效。
    • 将采用相对于您当前工作目录os.getcwd() 的相对路径。如果该路径与您的文件所在的路径匹配,则一切正常!但是如果你用$ python some_dir/program.py 之类的东西开始你的程序,那么它就不会......
    • 当我阅读您的回复时,我认为它一定是我运行的文本编辑器(它可能使用了一个工作目录,而不是在活动窗口中打开的文件的位置我会假设),但是现在当我运行它时它确实可以工作并且 print(os.getcwd()) 显示__file__ 目录......所以我现在唯一留下的问题是为什么它不是以前没有工作?呃,好吧。你的观点很好,我将使用路径。谢谢! :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-12
    • 1970-01-01
    • 2015-12-22
    • 2020-06-22
    • 1970-01-01
    • 2020-09-18
    • 2022-01-08
    相关资源
    最近更新 更多