小编Ree*_*ner的帖子

PyCharm与系统命令提示符(Windows)的导入方式不同

尽管我的脚本在PyCharm中运行,但在cmd提示符下运行脚本时遇到问题。我有这样的文件夹结构:

MyCode # PyCharm project folder
  /UsefulFunctions
    /Messaging
      /Texter.py
  /DiscordBot
    /DiscordBot.py
Run Code Online (Sandbox Code Playgroud)

在DiscordBot.py中,我有一个导入

from UsefulFunctions.Messaging import Texter
Run Code Online (Sandbox Code Playgroud)

当我从PyCharm运行它而没有问题时,此方法有效。但是,当我尝试从位于该DiscordBot级别的命令提示符运行时,出现以下错误:

ImportError:没有名为“ UsefulFunctions”的模块

因此,我自然而然地认为这意味着该UsefulFunctions文件夹不在我的路径上。因此,我进入了环境变量并将其添加到PATH变量(以及MyCode用于良好测量的文件夹)中。它仍然遇到此错误。我在这里浏览了一些有关导入的文章(主要是从其他文件夹导入文件),他们建议您执行以下操作:

import sys
sys.path.insert(0, '/path/to/application/app/folder')
import file
Run Code Online (Sandbox Code Playgroud)

或将__init__.py文件添加到每个文件夹中,以使它们注册为软件包。我继续将__init__文件添加到尝试从中导入的每个文件夹和子文件夹中,但是仍然无法从命令提示符下运行...我省略了sys.path.insert()解决方案,因为在将其明确添加到PATH变量后,我看不到任何好处。另一种解决方案是添加“。” 在导入之前,因为据推测它只是在搜索python的PATH。我尝试这样做是:

from .UsefulFunctions.Messaging import Texter
Run Code Online (Sandbox Code Playgroud)

ImportError:尝试相对导入,没有已知的父包

这个错误现在也显示在PyCharm上...我不明白为什么我的初始脚本可以在PyCharm上顺利运行的原因,但是从提示符处运行时,同一程序似乎找不到我的导入。有人可以解释运行程序的PyCharm和我的提示之间的区别吗?为什么这不,尽管有工作__init__.py的文件,并有加MyCode,并UsefulFunctions在Windows上我的PATH变量?

python directory import pycharm python-3.x

10
推荐指数
2
解决办法
443
查看次数

冻结脚本中的多处理python

我正在尝试将脚本编译multiprocessing为Windows可执行文件。起初,我遇到了一个问题,为什么当我将多处理模块的功能编译为可执行文件时,在Windows上调用多处理模块的功能时为什么python可执行文件会打开新的窗口实例。按照接受的答案,我调整了脚本,使

from multiprocessing import freeze_support
# my functions
if __name__ == "__main__":
    freeze_support()
    # my script
Run Code Online (Sandbox Code Playgroud)

作为脚本运行时,它再次完美运行。但是,当我编译并运行它时,会遇到:

错误信息

我在错误的绿色部分加了下划线。此特定行是指

freeze_support()
Run Code Online (Sandbox Code Playgroud)

在我的脚本中。此外,在此行上实际上并没有遇到它,但是当我的脚本进入多进程时,它是这样的:

p = multiprocessing.Process(target=my_function, args=[my_list])
p.start()
p1 = multiprocessing.Process(target=my_function, args=[my_list])
p1.start()
p.join()
p1.join()
Run Code Online (Sandbox Code Playgroud)

这是多处理模块中的错误(特别是第148行),还是我误解了所链接的答案,还是其他原因?

我还将注意到该脚本在编译时可以正常工作,但是对于产生的每个多进程(很多),您必须在错误消息上单击“确定”,并且每个错误消息都完全相同。这是否意味着我会以不正确的方式结束流程p.join()

我还尝试了在Python 3.4上的解决方案,不适用于py2exe,建议添加

multiprocessing.set_executable(os.path.join(sys.exec_prefix, 'pythonw.exe'))
Run Code Online (Sandbox Code Playgroud)

脚本,但这会导致以下脚本形式(甚至尚未编译)出现错误:

FileNotFoundError:[WinError 2]系统找不到指定的文件

谢谢您的帮助!

Frozen_support文档:https://docs.python.org/2/library/multiprocessing.html#multiprocessing.freeze_support

python windows multiprocessing cx-freeze python-3.x

10
推荐指数
1
解决办法
323
查看次数

将变量传递到索引函数中-Python

从事此工作已经有一段时间了,我在此站点上未找到任何示例,也未找到任何其他相关的示例。我有一个列表,我想做的很简单。我只需要搜索该列表以找到关键字“ Buffer Log”。找到该关键字后,我需要打印该行的每一行,直到列表末尾。任何方向都将不胜感激。看来我已经很接近了。

logfile = open('logs.txt', 'r')
readlog = logfile.readlines()
logfile.close()

lines = []
for line in readlog:
    lines.append(line)


for x in lines:
    if "Log Buffer" in x:
       z =lines.index(x)
       print(lines[z:]
Run Code Online (Sandbox Code Playgroud)

python

2
推荐指数
1
解决办法
81
查看次数