FileNotFoundError: [Errno 2] при упаковке для PyPI - PullRequest
2 голосов
/ 12 июня 2019

Я загрузил простой пакет Python в https://test.pypi.org. Когда я загружаю его с помощью pip и пытаюсь выполнить yo, я получаю FileNotFoundError: [Errno 2] File b'data/spam_collection.csv' does not exist: b'data/spam_collection.csv'. Ранее у меня были проблемы с загрузкой CSV-файла при упаковке. См. Мой вопрос в Не удалось загрузить CSV-файл в test.pypi.org . Теперь после установки пакета с pip я запускаю pip show -f bigramspamclassifier. Я получаю CSV-файл в списке. Поэтому я считаю, что файл был загружен. Я думаю, что проблема заключается в чтении файла в моем файле Python в пакете. Каким должен быть путь к файлу csv в SpamClassifier.py?

pip show -f классификатор спама bigrams

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

Файловая структура моего проекта

enter image description here

Путь к csv в файле SpamClassifier.py # Это то, что я хочу знать

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

1 Ответ

2 голосов
/ 02 июля 2019

Ваш скрипт пытается загрузить файл 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)
...