【问题标题】:Why cant I import my package created using setuptools?为什么我无法导入使用 setuptools 创建的包?
【发布时间】:2021-06-28 09:46:01
【问题描述】:

我正在开发一个项目 (CN_Analysis),我想使用 setuptools 创建我自己的 python 包 (cn_tools)。我的目标是让它在我的项目文件夹中的任何地方都可以访问。但是,当我尝试从子文件夹(例如 CN_Analysis/Notebooks)导入它时,我得到了

(.virtualenvironment) ...:~/Workspace/CN_Analysis/Notebooks$ python3

import cn_tools
ModuleNotFoundError: No module named 'cn_tools'

目录结构如下:

CN_Analysis
├──README.md\
├──requirements.txt\
├──.gitignore\
├──setup.py\
├──.virtualenvironment/\
├──Notebooks/\
├──Data/\
├──cn_tools/\
|  ├──__init__.py\
|  ├──my_tools.py

setup.py的内容是:

from setuptools import setup, find_packages
setup(name = 'cn_tools',
version = '0.1',
description = 'This package contains helpful functions for the processing data obtained from Karambola.',
packages=find_packages(where='cn_tools'),
package_dir={'': 'cn_tools'})

附加信息:
基本套路是

source .virtualenvironment/bin/activate
(.virtualenvironment) python3 setup.py develop

结果

Installed /home/ansgar/Workspace/CN_Analysis/cn_tools\
Processing dependencies for cn-tools==0.1\
Finished processing dependencies for cn-tools==0.1

检查 python3

(.virtualenvironment) which python3        

/home/my_name/Workspace/CN_Analysis/.virtualenvironment/bin/python3

如果我在导航到子文件夹(例如 Notebooks/)后从 python 调用 sys.path,它会返回

 ['',
 '/usr/lib/python38.zip',
 '/usr/lib/python3.8',
 '/usr/lib/python3.8/lib-dynload',
 '/home/my_name/Workspace/CN_Analysis/.virtualenvironment/lib/python3.8/site-packages',
 '/home/my_name/Workspace/CN_Analysis/cn_tools']

有人知道为什么我不能导入 cn_tools 吗?

【问题讨论】:

  • 尝试运行python3 setup.py install先安装lib
  • 这样做并不能解决问题。但是,我得到输出\安装库代码到 build/bdist.linux-x86_64/egg running install_lib 警告: install_lib: 'build/lib' 不存在 -- 没有要安装的 Python 模块

标签: python setuptools


【解决方案1】:

如果我只是使用它就可以工作

packages=find_packages()

而不是

packages=find_packages(where='cn_tools')

在 setup.py 文件中。

【讨论】:

  • 很高兴您能够修复它。我建议您阅读 setup.py 中的 requirements.txt。这将确保您在安装过程中安装依赖项。我可以通过这样的补充提供答案(超出 OP 的范围)。
  • 我认为这是个好主意,我对此有一个疑问。您是否建议将 reqirements.txt 与有关整个项目的所有依赖项一起使用,或者仅使用模块中明确需要的那些?
  • 这取决于你最终想要做什么。您可以通过 pip freeze > requirements-lock.txt 对此设置/环境进行锁定,但我建议列出主要的,因为它们通常具有内置的特定依赖项。后者更容易理解,锁定的可能差别不大以及满足您需求的最新版本。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-12-25
  • 2021-11-10
  • 2016-05-31
  • 1970-01-01
  • 1970-01-01
  • 2021-07-05
  • 1970-01-01
相关资源
最近更新 更多