Anaconda 包问题:内部模块找不到位于同一目录中的数据文件
Anaconda Package issue: An internal module cannot find a data file located in the same directory
我正在使用 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
class 和
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')
我正在使用 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
class 和
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')