【问题标题】:Python Trouble Importing Local Package Inside Local PackagePython在本地包中导入本地包时遇到问题
【发布时间】:2019-04-11 05:11:29
【问题描述】:

这是我在这里的第一篇文章,我对 python 也很陌生,在过去的两天里,我一直在努力解决这个错误:

Traceback (most recent call last):
File "Main.py", line 6, in <module>
    import PyScrape
File "/Users/arya/Desktop/Coding/Python/x/x/PyScrape/__init__.py", line 1, in <module>
    from . import ProxyScraper
File "/Users/arya/Desktop/Coding/Python/x/x/PyScrape/ProxyScraper/__init__.py", line 6, in <module>
    from . import FreeProxyList
ModuleNotFoundError: No module named 'ProxyScraper'

当尝试在“PyScrape”目录内的__init__.py文件中导入“ProxyScraper”目录时,我的文件结构如下,如果需要透露更多信息,请告诉我。

PyScrape/
    __init__.py
    ProxyChecker.py
    ProxyScraper/
        __init__.py
        CheckerProxy.py
        FreeProxyList.py
        Hidester.py
        HttpTunnel.py
        PremProxy.py
        SpysMe.py
        Utility.py

“PyScrape”目录中__init__.py的内容如下:

from . import ProxyScraper
from . import ProxyChecker

def Scrape():
     return ProxyChecker.CheckProxyList(ProxyScraper.Scrape())

“ProxyScraper”目录下__init__.py的内容如下: 从线程导入线程 从队列导入队列

from . import FreeProxyList
from . import Hidester
from . import CheckerProxy
from . import SpysMe
from . import HttpTunnel

SourceArray = ["FreeProxyList", "Hidester", "CheckerProxy", "SpysMe", "HttpTunnel"]

def Scrape():
    WorkerList = []
    ProxyQueue = Queue()

    for Source in SourceArray:
        Worker = Thread(name=Source, target=eval(Source + ".Scrape"), args=(ProxyQueue,))
        WorkerList.append(Worker)
        Worker.start()

    for Worker in WorkerList:
        Worker.join()

    return ProxyQueue

【问题讨论】:

  • ProxyScrapper.py 是目录名吗?
  • @yorodm 不是,那是一个错字,我应该在发帖前仔细阅读我的帖子????
  • 您要导入哪个__init__.py?你能告诉我们__init__.py的内容吗?
  • 能否请您发布您正在使用的导入声明以及完整的错误消息?
  • @raratiru from . import ProxyScraper

标签: python python-3.x python-import python-module python-packaging


【解决方案1】:

对于要导入的 python 模块,它的包含目录必须设置在 $HOME/.bashrc 文件中的 PYTHONPATH 变量中,或者在运行时显式插入 sys.path

一种解决方案是:

>>> import sys
>>> sys.path.insert(0, '/path/to/PyScrape')

另一个是:

$ echo 'export PYTHONPATH=$PYTHONPATH:/path/to/PyScrape' >> $HOME/.bashrc
$ source $HOME/.bashrc

请记住,相关文件可能不是.bashrc,而是.profile

当你设置PYTHONPATH 那么命令的结果:

>>> import sys
>>> sys.path

将包含您在$PYTHONPATH 中设置的路径,因为:

sys.path 是指定模块搜索路径的字符串列表。从环境变量 PYTHONPATH 初始化,加上依赖于安装的默认值。

【讨论】:

  • 我怎样才能导入 PyScrape 目录而不将其添加到 sys.path 中,或者这仅适用于从正在导入的文件夹中的子文件夹导入包时?
  • 我确实将您的答案标记为正确的答案,因为它确实解决了这种情况,但肯定有一种更清洁的方法来做到这一点
  • @Arya 通过将目录添加到环境变量PYTHONPATH,实际上是添加到sys.path。正如sys.path 的链接文档所述:“指定模块搜索路径的字符串列表。从环境变量 PYTHONPATH 初始化,加上依赖于安装的默认值。”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-16
  • 1970-01-01
  • 1970-01-01
  • 2018-07-27
相关资源
最近更新 更多