【问题标题】:What is the line for reading a file from inside a python package [duplicate]从python包中读取文件的行是什么[重复]
【发布时间】:2021-08-28 00:40:33
【问题描述】:

我已经用 setuptools 打包了一个 python 文件,不幸的是我在其他目录中导入项目时遇到了 FileNotFound。在脚本中导入文本文件的正确方法是什么?

项目结构:

main_folder/
├─ MANIFEST.in
├─ setup.py
├─ mypgk/
│  ├─ __init__.py
│  ├─ main.py
│  ├─ files/
│  │  ├─ somewhat.csv

这是我的 setup.py

from setuptools import setup, find_packages

setup(
    name='mypkg',
    version='0.0.1',
    packages=find_packages(exclude=('test*', 'testing*'))
)

MANIFEST.in

recursive-include mypkg *.csv

main.py:

import csv 

config_file = os.path.join('mypkg', 'files', 'somewhat.csv') 
with open(config_file, 'r') as config_file:
    reader = csv.reader(config_file)

在同一个目录下运行这个脚本是可以的,但是当我在其他目录上使用它时,提示FileNotFound错误,我错过了什么吗?

奇怪的是,当我输入 python setup.py sdist 时,它在分发中得到确认

copying MANIFEST.in -> mypkg-0.0.1
copying setup.py -> mypkg-0.0.1
copying mypkg\main.py -> mypkg-0.0.1\mypkg
copying mypkg\__init__.py -> mypkg-0.0.1\mypkg
copying mypkg.egg-info\PKG-INFO -> mypkg-0.0.1\mypkg.egg-info
copying mypkg.egg-info\SOURCES.txt -> mypkg-0.0.1\mypkg.egg-info
copying mypkg.egg-info\dependency_links.txt -> mypkg-0.0.1\mypkg.egg-info
copying mypkg.egg-info\top_level.txt -> mypkg-0.0.1\mypkg.egg-info
copying mypkg\files\somewhat.csv -> mypkg-0.0.1\mypkg\files

但是进入目录,我没有找到文件夹

【问题讨论】:

  • os.dirname(__file__) + '/files/somewhat.csv
  • 模块 'os' 没有属性 'dirname' ?试过 os.path.dirname 及其没有这样的文件或目录
  • 试试os.path.dirname(__file__)
  • 是的,我做了,但同样的错误没有这样的文件或目录

标签: python setuptools setup.py


【解决方案1】:

将@Tim Roberts 回答到您的示例中:

import csv 

config_file = os.path.join(os.path.dirname(__file__), 'files', 'somewhat.csv') 
with open(config_file, 'r') as config_file: 
    reader = csv.reader(config_file)

只要文件目录与 main.py 位于同一目录中,这应该可以工作。包含它们的目录的名称将不再重要

【讨论】:

  • 检查了生成的包文件,文件夹好像不见了,但是运行python setup.py sdist时它还是存在的@
  • MANIFEST.in 仅适用于 sdist。见stackoverflow.com/…
猜你喜欢
  • 2018-01-26
  • 1970-01-01
  • 2018-05-14
  • 2013-01-21
  • 2021-05-14
  • 1970-01-01
  • 1970-01-01
  • 2017-08-29
  • 1970-01-01
相关资源
最近更新 更多