如何导入带有本地文件的库?

我正在尝试将我创建的库导入另一个 Python 脚本。当我导入它时,它无法在本地读取文件,这意味着它的文件路径已关闭。


我使用 Python3.6.6 Ubuntu 16.04


第一种方法


import sys

sys.path.append ("/home/myName/Desktop/myLibrary")


# myScript is in myLibrary

# it reads some files when being imported

import myScript

第二种方法


import importlib.util


spec = importlib.util.spec_from_file_location ("myLibrary", 

     "/home/myName/Desktop/myLibrary/myScript.py")

foo = importlib.util.module_from_spec (spec)

spec.loader.exec_module (foo)

我在这两种情况下得到的错误: FileNotFoundError: [Errno 2] File b'data/myFile.csv' does not exist: b'data/myFile.csv'


数据目录在 myLibrary 中。


当我os.getcwd()在 myScript 中运行时,我得到:


/home/myName/Desktop/myLibrary


当我导入 myScript 然后os.getcwd()运行时,我得到:


/home/myName/Desktop/otherLibrary


知道为什么工作目录关闭了,我应该如何解决这个问题?


白衣染霜花
浏览 158回答 2
2回答

心有法竹

os.getcwd() 不仅仅返回当前工作目录。它在您的环境中默认为 $PWD。这不是脚本所在的位置,而是您执行脚本时所在的位置。您可以通过相对路径解决它。__file__提供运行的文件的路径。os.path.dirname提供给定文件的目录。这意味着您可以获得运行 Python 文件的文件夹。因此,您可以根据 Python 文件的文件夹提供路径。例如。:sys.path.append(os.path.join(os.path.realpath(os.path.dirname(__file__)), "your_relative_path", "your_python_file.py"))如果您正在运行的 Python 文件的路径是/home/user/python_script/test.py,那么/home/user/python_script/your_relative_path/your_python_file.pypath 将被附加到您的路径中。供参考:如果您之前使用此行,import您将发出警告:(模块级别导入不在文件顶部(E402))但您可以使用此注释行抑制此警告:...  # noqa: E402

HUH函数

特殊变量__file__总是包含脚本本身的完整路径。对于导入的模块也是如此。您可以使用它来查找一些本地数据文件。但是,这确实需要更改模块文件以以不同的方式加载数据。这是一个演示它的基本示例(我假设是 Linux):myLibrary我在其中创建了一个库目录/var/tmp和一个子目录data,供本地文件读取:mkdir -p /var/tmp/myLibrary/data然后,作为测试数据,我创建了一个文本文件:echo 'Hello from test file'  > /var/tmp/myLibrary/data/testfile.txt该模块/var/tmp/myLibrary/myScript.py如下所示:import os.path# Prepare path to data file realative to this module.#libdir = os.path.dirname(__file__)data_file_path = os.path.join(libdir, 'data/testfile.txt')# Open the file#my_data_file = open(data_file_path)# Read and show the data from the file#data = my_data_file.read()print(data)还有一个简单的脚本来导入这个模块。运行时,只需导入库模块即可打印数据文件的内容:import syssys.path.append ('/var/tmp/myLibrary')import myScript
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python