我有一个自定义的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
,其中包含INSTALLER
,METADATA
,RECORD
,top_level.txt
,WHEEL
demo
,其中包含__init__.py
和args.py
对我在这里做错的任何想法吗?
另外,我的代码需要访问data_files
(即fonts/arial_narrow_7.ttf
)。我注意到有两个目录config
和fonts
放在~/anaconda3/envs/test
的根目录下。我的代码现在将如何访问这些文件?我的代码如下所示。
ImageFont.truetype('fonts/arial_narrow_7.ttf')
并且当我从项目的根目录(不在项目目录外部的测试conda环境中)运行代码时,此方法有效,因为相对于我运行代码的位置存在font
目录。但是,如果说我切换到conda环境并从do-something
执行/tmp
,我敢肯定找不到.ttf
文件。是否有任何打包字体的策略,以便无论我在什么位置执行程序入口点都可以读取字体?