gpt4 book ai didi

python - 如何从 OSX 上的 Python 3.5 中的另一个文件夹导入 python 文件?

转载 作者:太空宇宙 更新时间:2023-11-04 07:33:53 28 4
gpt4 key购买 nike

我使用 Python 3.5,我的项目结构是这样的:

Project/
App/
myApp.py
Libraries/
myLibA.py
myLibB.py

我想在 myApp.py 中导入 myLibA.py

如果我简单地写 from Libraries import myLibA 我最终会遇到这个错误:

ImportError: No module named Libraries.

我找到了问答 Importing files from different folder in Python ,我从中调整了自己的解决方案,将其添加到 myApp.py 的开头,以便将我的 Project 文件夹添加到 Python 路径:

import sys
sys.path.insert(0, sys.path[0] + "..")

这在 Windows 上运行良好,但是当我从 OSX (10.9) 上的同一项目运行 myApp.py 时,我看到相同的错误消息,找不到我的模块。

重现我的问题非常简单。只需像这样填写 Python 文件:

我的应用程序.py :

import sys
sys.path.insert(0, sys.path[0] + "..")

from Libraries import myLibA

if __name__ == '__main__':
myLibA.print_hello()

myLibA.py :

def print_hello():
print("Hello")

我不明白为什么 Python Path 方法在这里不起作用。无论如何,我正在寻找一种解决方案,使 Python 文件与 Windows 兼容并且包含在源代码中(在 Python 文件中)。我已经看到了一些控制台 Hook ,但我对此并不满意,因为我希望能够在任何使用 Python 3.5 的 OSX/Windows PC 上克隆项目,然后运行 ​​myApp.py。我正在寻找一种解决方案,该解决方案不涉及 Python 3.5 中不存在的任何库。

还有其他方法可以实现吗?

(如果不是,是因为组织这样的项目不是 pythonic 吗?作为 C 开发人员,我可能采用了错误的方法)

最佳答案

__init__.py 添加到您的 Libraries 目录。该文件可以是空的,它神奇地将 Libraries 目录变成了 package .现在:

import sys
import os.path
libdir = os.path.dirname(__file__)
sys.path.append(os.path.split(libdir)[0])

from Libraries import myLibA

if __name__ == '__main__':
myLibA.print_hello()

__file__ 特殊变量给出了当前脚本的文件名。 os.path.dirname() 给出了它所在的目录,os.path.split(libdir)[0] 给出了它的父目录。这应该适用于从中调用脚本的任何地方。

我正在使用 append 而不是 insert。通常建议最后搜索用户目录,并且 append 在 C Python 实现中比 insert 更有效。

关于python - 如何从 OSX 上的 Python 3.5 中的另一个文件夹导入 python 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40886011/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com