安装自定义的内置轮包后,出现ModuleNotFoundError

时间:2019-02-01 05:24:56

标签: python pip anaconda conda python-wheel

我有一个自定义的Python库,它已按照python setup.py sdist bdist_wheel的方式内置在转盘中。

setup.py文件如下所示。

from setuptools import setup, find_packages

with open('README.rst', 'r') as fh:
    long_desc = fh.read()

setup(
    name='my_lib',
    version='0.0.1',
    packages=find_packages(),
    description='',
    long_description=long_desc,
    scripts=['do-something'],
    data_files=[
        ('config', ['config/params1.cfg', 'config/params2.cfg']),
        ('fonts', ['fonts/arial_narrow_7.ttf'])
    ]
)

此命令生成文件dist/my_lib-0.0.1-py3-none-any.whl。然后,我如下定义一个conda environment.yml

name: test
channels:
  - anaconda
dependencies:
  - python=3.6
  - pip:
    - https://s3.amazonaws.com/mybucket/my_lib-0.0.1-py3-none-any.whl

我用conda env create -f environment.yml创建conda环境。安装很好,但是当我尝试执行do-something时,出现以下错误ModuleNotFoundError: No module named 'demo'do-something脚本如下所示。

#! /usr/bin/env python

from demo.args import get_parser, start

if __name__ == "__main__":
    opt = get_parser().parse_args()
    print(opt)
    start(opt)

这很奇怪,因为当我激活conda环境conda activate test并将from demo.args import get_parser, start复制/粘贴到REPL时,它可以工作。

~/anaconda3/envs/test/lib/python3.6/site-packages中,我看到2个目录。

  • my_lib-0.0.1.dist-info,其中包含INSTALLERMETADATARECORDtop_level.txtWHEEL
  • demo,其中包含__init__.pyargs.py

对我在这里做错的任何想法吗?

另外,我的代码需要访问data_files(即fonts/arial_narrow_7.ttf)。我注意到有两个目录configfonts放在~/anaconda3/envs/test的根目录下。我的代码现在将如何访问这些文件?我的代码如下所示。

ImageFont.truetype('fonts/arial_narrow_7.ttf')

并且当我从项目的根目录(不在项目目录外部的测试conda环境中)运行代码时,此方法有效,因为相对于我运行代码的位置存在font目录。但是,如果说我切换到conda环境并从do-something执行/tmp,我敢肯定找不到.ttf文件。是否有任何打包字体的策略,以便无论我在什么位置执行程序入口点都可以读取字体?

0 个答案:

没有答案