python - Anaconda 包问题 : An internal module cannot find a data file located in the same directory

标签 python csv package conda setup.py

我正在使用 anaconda conda 包框架构建 python 3.6 包。 该包似乎在源文件方面工作得很好。没有 构建错误等。但是,我正在尝试在我存储的位置添加新功能 包中的一些小型 CSV 数据文件。我想使用 pandas

加载数据

我遇到的问题是我似乎无法引用相对的 包内正确的文件路径。所以如果我是这样的代码就可以工作 也就是说,当我位于包内时,Jupyter 笔记本无法工作。这 路径问题似乎是问题本身的表现方式,但我怀疑它有 更多地与如何在包中处理内部寻址有关。

错误信息是:

 FileNotFoundError: File b'data.csv' does not exist

这个错误的奇怪之处在于 data.csv 文件与尝试访问它的 python 文件位于同一目录中。所以我不明白为什么下面的python模块reader.py似乎找不到这个文件。

所以让我给出一个包结构和代码的最小示例。

/project
   /docs
   /packaging
       /conda_build_files
           bld.bat
           build.sh
           meta.yaml
   /src
       /data
           __init__.py
           reader.py
           data.csv   #PROBLEM AREA     
       __init__.py
       module1.py
   setup.py
   README.rst

所以问题是文件reader.py使用pandas来读取csv文件 进入数据框。然后,Module1 调用reader 来获取数据。

所以代码设置如下:

##reader.py

import pandas as pd
class Reader():

    def read():
    return pd.read_csv('data.csv')

然后在 module1 中我的代码为:

##module1.py

from .data.reader import Reader
import pandas as pd

def main():
    dat = Reader.read()
    print(dat.head())

所以这就是我收到关于data.csv不存在的奇怪错误的地方。现在 在这种情况下,我什至不需要相对导入,因为 Reader 类和 data.csv 文件位于同一文件夹中。是的,出于某种原因我明白了 奇怪的错误消息。

data.csv 文件包含在 MANIFEST.in 文件中。

我的setup.py看起来像这样。

try:
    from setuptools import setup
except ImportError:
    from distutils.core import setup

setup(
    name='pkg',
    version='0.6.0',
    description="desc",
    long_description=readme + '\n\n' + history,
    author="me",
    author_email='me',
    url='https://github.com/.../pkg',
    packages=[
        'pkg',
    ],
    package_dir={'pkg':
                 'pyugend'},
    package_data={
      'mydata': ['pkg/data/*.csv'],
   },
    include_package_data=True,
    install_requires=requirements,
    license="ISCL",
    zip_safe=False,
    keywords='pkg',
    classifiers=[
        'Development Status :: 2 - Pre-Alpha',
        'Programming Language :: Python :: 3.6',
    ],
    test_suite='tests',
    tests_require=test_requirements
)

meta.yaml 文件也非常普通:

package:
  name: pkg
  version: "0.6"

source:
   git_url: https://github....

build:
  # noarch_python: True
  # preserve_egg_dir: True
  entry_points:


requirements:
  build:
    - python


  run:
    - python
    - numpy
    - pandas
    - docopt
    - matplotlib

about:

  license: MIT License

最佳答案

尽管存在 reader.py,您创建的 Python 实例仍然在您启动的本地目录中运行。换句话说,如果您在 C:\Users\krishnab 中打开 CMD 提示符(或终端)并启动 Python,则该 Python 实例的 C:\Users\krishnab 为这是基地位置。

当调用 pd.read_csv('data.csv') 时,Python 在当前工作目录中查找 data.csv,在本例中为 C:\Users\krishnab


您可以在/data下添加一个额外的空python文件。它仅用于获取data.csv的目录。

/src
    /data
        __init__.py
        reader.py
        data.csv 
        other.py

other.py的内容:

# other.py
pass

reader.py中,您可以导入other并使用__file__属性来获取路径。

reader.py的内容:

from . import other
import pandas as pd
import os
data_dir = os.path.dirname(os.path.abspath(other.__file__))

class Reader:
    def read(self):
        return pd.read_csv(data_dir+'/data.csv')

关于python - Anaconda 包问题 : An internal module cannot find a data file located in the same directory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47784295/

相关文章:

PYTHON - BEAUTIFULSOUP 如何将空 TD(表数据)刮取为空值而不是跳过它

python - 如何判断 screen 是否正在运行?

python - 如何同时将一个变量乘以一个数字

python - csv writer 在每一行周围加上引号

java - 追加到文件中行的末尾

go - 如何在终端中使用 Go 本地包

python - 如何从 Buildbot 捕获内部版本号

python - 如何考虑同一 DAG 中先前任务的结果来创建动态数量的任务?

linux - 无法在 Linux Mint 17.3 上安装 git

spring - 如何组织通用的 Spring Controller 功能?