FileNotFoundError: [Errno 2] 打包 PyPI 时

Posted

技术标签:

【中文标题】FileNotFoundError: [Errno 2] 打包 PyPI 时【英文标题】:FileNotFoundError: [Errno 2] when packaging for PyPI 【发布时间】:2019-10-26 18:57:36 【问题描述】:

我在https://test.pypi.org 上传了一个简单的python 包。当我用 pip 下载它并尝试运行时,我得到FileNotFoundError: [Errno 2] File b'data/spam_collection.csv' does not exist: b'data/spam_collection.csv'。早些时候,我在打包时遇到了上传 csv 文件的问题。在Could not upload csv file to test.pypi.org 中查看我的问题。现在,在使用 pip 安装软件包后,我运行 pip show -f bigramspamclassifier。我列出了 csv 文件。因此,我相信该文件已上传。我认为问题在于读取包中我的python文件中的文件。 SpamClassifier.py 中 csv 文件的路径应该是什么?

pip show -f bigramspamclassifier

Version: 0.0.3
Summary: A bigram approach for classifying Spam and Ham messages
Home-page: ######
Author: #####
Author-email: #######
Location: /home/kabilesh/PycharmProjects/TestPypl3/venv/lib/python3.6/site-packages
Requires: nltk, pandas
Required-by: 
Files:
  bigramspamclassifier-0.0.3.dist-info/INSTALLER
  bigramspamclassifier-0.0.3.dist-info/LICENSE
  bigramspamclassifier-0.0.3.dist-info/METADATA
  bigramspamclassifier-0.0.3.dist-info/RECORD
  bigramspamclassifier-0.0.3.dist-info/WHEEL
  bigramspamclassifier-0.0.3.dist-info/top_level.txt
  bigramspamclassifier/SpamClassifier.py
  bigramspamclassifier/__init__.py
  bigramspamclassifier/__pycache__/SpamClassifier.cpython-36.pyc
  bigramspamclassifier/__pycache__/__init__.cpython-36.pyc
  bigramspamclassifier/data/spam_collection.csv

我的项目文件结构

SpamClassifier.py 文件中 csv 的路径#这是我想知道的

    def classify(self):
    fullCorpus = pd.read_csv("data/spam_collection.csv", sep="\t", header=None)
    fullCorpus.columns = ["lable", "body_text"]

【问题讨论】:

【参考方案1】:

您的脚本正在尝试从相对路径加载spam_collection.csv 文件。相对路径是相对于 python 被调用的位置加载的,不是源文件所在的位置。

这意味着当您从bigramspamclassifier 目录运行模块时,这将起作用。但是,一旦您的模块安装了pip,文件将不再与您运行代码的位置相关(它将被埋在您安装的库中的某个位置)。

您可以通过执行以下操作来相对于源文件加载:

import os
this_dir, this_filename = os.path.split(__file__)
DATA_PATH = os.path.join(this_dir, "data", "spam_collection.csv")
fullCorpus = pd.read_csv(DATA_PATH, sep="\t", header=None)

【讨论】:

谢谢@Dustin。我已经放弃了这项工作,现在我可以恢复它了:)

以上是关于FileNotFoundError: [Errno 2] 打包 PyPI 时的主要内容,如果未能解决你的问题,请参考以下文章

您如何解决: FileNotFoundError: [Errno 2] 没有这样的文件或目录:

FileNotFoundError: [Errno 2] 没有这样的文件或目录,复制路径名后

PyInstaller + UI 文件 - FileNotFoundError: [Errno 2] 没有这样的文件或目录:

PyInstaller + UI 文件 - FileNotFoundError: [Errno 2] 没有这样的文件或目录:

FileNotFoundError: [Errno 2] 没有这样的文件或目录 + os.execv

p = open(q,'r') FileNotFoundError: [Errno 2] 没有这样的文件或目录:'m.txt' [重复]