Python 2 imp-ValueError:尝试在非包中进行相对导入

时间:2019-05-13 15:33:21

标签: python python-2.7 import

我正在尝试使用imp库导入库,我的代码如下所示:

import imp

PyPDF2 = imp.load_source('PyPDF2', '/Python Projects/econquizz/PyPDF2-master/PyPDF2/__init__.py')
pdfFileObj = open('./Chapters/Chapter-3_5.pdf', 'rb')

当我尝试运行此代码时,出现以下错误:

Traceback (most recent call last):
  File "brains_3.py", line 3, in <module>
    PyPDF2 = imp.load_source('PyPDF2', '/Python Projects/econquizz/PyPDF2-master/PyPDF2/__init__.py')
  File "/Python Projects/econquizz/PyPDF2-master/PyPDF2/__init__.py", line 1, in <module>
    from .pdf import PdfFileReader, PdfFileWriter
ValueError: Attempted relative import in non-package

有人知道如何解决这个问题吗?

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我认为您需要指定包本身作为参数:

PyPDF2 = imp.load_source('PyPDF2', '/Python Projects/econquizz/PyPDF2-master/PyPDF2/')

更好的是,将/Python Projects/econquizz/PyPDF2-master放在PYTHONPATH环境变量中,并使用普通的import语句(import PyPDF2)。



后续活动:

以下是一份记录,显示了它在我的Ubuntu系统上如何工作:

$ mkdir /tmp/demonstration
$ cd /tmp/demonstration
$ wget https://files.pythonhosted.org/packages/b4/01/68fcc0d43daf4c6bdbc6b33cc3f77bda531c86b174cac56ef0ffdb96faab/PyPDF2-1.26.0.tar.gz
$ tar -zxvf PyPDF2-1.26.0.tar.gz 
$ export PYTHONPATH=/tmp/demonstration/PyPDF2-1.26.0/
$ python2
Python 2.7.15rc1 (default, Nov 12 2018, 14:31:15) 
[GCC 7.3.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import PyPDF2
>>> print(PyPDF2)
<module 'PyPDF2' from '/tmp/demonstration/PyPDF2-1.26.0/PyPDF2/__init__.pyc'>
>>> 
>>> help(PyPDF2)
Help on package PyPDF2:

NAME
    PyPDF2

FILE
    /tmp/demonstration/PyPDF2-1.26.0/PyPDF2/__init__.py

PACKAGE CONTENTS
    _version
    filters
    generic
    merger
    pagerange
    pdf
    utils
    xmp
[...]

您不需要完全像我那样做。 (特别是,除非您确实不想保留它,否则请不要在/ tmp中执行此操作!)关键是要查看将模块放入的实际目录,并确保将其放入{{1} },并且该python因此能够找到并加载它。

我没有阅读作者发表的有关如何正确安装它的任何说明。从我的源代码运行时,某些模块实际上无法正常工作。某些模块不需要任何特殊安装,并且可以按照其源代码分发的形式正常工作。