【问题标题】:Importing package in another package's module?在另一个包的模块中导入包?
【发布时间】:2021-01-29 18:48:33
【问题描述】:

我正在构建一个包(然后将其上传到 pypi)。我在这个包中有 3 个模块。这些包有一些依赖项,如 numpy、cv2 等。

所以,我在 setup.py 文件中提到了我的依赖项。

# -*- coding: utf-8 -*-
import setuptools

setuptools.setup(
    name='StyleTransferTensorFlow',
    url='https://github.com/LordHarsh/Neural_Style_Transfer',
    author='Hash Banka',
    author_email='harshbanka321@gmail.com',
    packages=setuptools.find_packages(),

    # Needed for dependencies
    install_requires=['matplotlib','tensorflow','os-win','ffmpy','glob2', 'pytest-shutil', 'pytube', 'opencv-python', 'pillow', 'numpy', 'tensorflow_hub'],
    
    version='0.0.8',
    # The license can be anything you like
    license='MIT',
    description="Package to apply style transfer on different frames of a video",
    # We will also need a readme eventually (there will be a warning)
    # long_description=open('README.txt').read(),
    python_requires='>=3.6',
)

我还将它们导入到与模块位于同一目录中的 init.py 文件中。

import matplotlib.pyplot as plt
import tensorflow as tf
import tensorflow_hub as hub
import numpy as np
from pytube import YouTube
import os
import cv2
from PIL import Image
import shutil
import glob
import ffmpy

但是当我在模块中执行代码时仍然出现错误

NameError: name 'cv2' is not defined

我不确定为什么我的导入没有运行。 我在一个模块中使用了 cv2 来完成这项任务。 所以我不确定我做错了什么。请帮帮我。

【问题讨论】:

  • 除了init.py之外的其他模块你能import cv2吗?
  • 我正在使用 google colab 工作。当我在 colab 中直接使用 import 命令时,它可以工作。但是 init.py 中的导入不起作用。我想要的是,当我使用包中的任何内容时,它会自动导入所需的包,如 cv2、numpy 等。那么你能告诉我在哪里可以写我的导入命令吗?谢谢。

标签: python python-3.x package


【解决方案1】:

我不确定你是否完全理解 install_requirespackages 的用途。

  • install_requires 通过setup.py 指定安装 所需的库。例如。使用pippython setup.py install 安装它时。您正在指定在安装之前您的计算机上应该有什么以使安装正常工作。不会安装任何包:如果此处列出的包丢失,它只会在安装过程中引发错误。 一个非常常见的包是numpy,因为您可以在setup.py 中导入它,例如,如果您有一些需要在安装时编译的C 或FORTRAN 代码。
  • packages 参数显示您的 library 需要哪些软件包才能工作,因此基本上哪些软件包与库一起安装。它将检查该软件包是否尚未安装在您的计算机上,如果没有安装在库中。

我要做的就是完全清空install_requires 参数。如果您在setup.py 中没有导入这些包,甚至不要指定它。如果它仍然不起作用,我会将setuptools.find_packages() 替换为您当前提供给install_requires 的列表。

【讨论】:

  • PEP8 评论:您的导入应按字母顺序排列。包组织评论:你不是把这个命名为init.py而不是__init__.py吗?不知道是需要还是有什么误解。
猜你喜欢
  • 2021-01-15
  • 2020-06-22
  • 2014-04-30
  • 1970-01-01
  • 2019-07-03
  • 1970-01-01
  • 2012-05-25
  • 2017-01-23
  • 1970-01-01
相关资源
最近更新 更多