【问题标题】:python writefile ImportError: No module named "mainss_script"python writefile ImportError:没有名为“mainss_script”的模块
【发布时间】:2023-10-25 14:49:01
【问题描述】:
%%writefile mainss_script.py
def count_vowels(sentence):
    """Count the number of vowels in sentence."""
    vowels = 0
    for c in sentence:
        if c.lower() in "aeiouy":
            vowels = vowels + 1
    return vowels

def count_consonants(sentence):
    """Count the number of consonants in sentence."""
    consonants = 0
    for c in sentence:
        if c.isalpha():
            if c.lower() not in "aeiouy":
                consonants = consonants + 1
    return consonants

def count_digits(sentence):
    """Count the number of digits in sentence."""
    digits = 0
    for c in sentence:
        if c.isdigit():
            digits = digits + 1
    return digits
def mainss():
    test_sentence = "Plan 2 is not working!"
    print("Number of vowels = {:d}".format(count_vowels(test_sentence)))
    print("Number of consonants = {:d}".format(count_consonants(test_sentence)))
    print("Number of digits = {:d}".format(count_digits(test_sentence)))

if (__name__=="__main__"):
    mainss()

import mainss_script
mainss_script.mainss()

ImportError                               Traceback (most recent call last)
<ipython-input-66-1fd7edecdd49> in <module>()
----> 1 import mainss_script
      2 mainss_script.mainss()

ImportError: No module named 'mainss_script'

生成了mainss_script.py,但是,当我尝试导入它时,它返回错误,为什么??

忽略单词要求 忽略单词要求 忽略单词要求

【问题讨论】:

  • @VineethSai %%writefile filename 是 Jupyter notebook 的魔术别名,用于将单元格的内容写入文件。在这种情况下,当包含这些代码的单元格运行时,第一个代码块被写入 mainss_script.py。她在导入文件时遇到问题,因为该文件不存在或不在解释器已知的位置。

标签: python python-3.x importerror writefile


【解决方案1】:

文件 ma​​inss_script.py 必须在您启动 ipython 的目录中。

如果没有,您可以将其位置插入sys.path 以便解释器找到它

import sys
sys.path.insert(0, "path to mainss_script.py")

import mainss_script
mainss_script.mainss()

另外,%%writefile 是 Jupyter 魔术别名命令,用于将单元格的内容写入文件。所以我的猜测是你的代码是从一些 Jupyter 笔记本复制过来的,运行包含这些行的单元格会在当前目录中创建 mainss_script

如果您没有该文件,请将这些代码行不包括包含 %%writefile 的行粘贴到您所在目录中的文件 ma​​inss_script.py 中启动 IPython。

如果出于某种原因您确实希望将 ma​​inss_script.py 保存在特定位置,那么您应该按照上面的说明将 ma​​inss_script 的路径添加到 @987654326 @ 让解释器找到它。之后执行导入并运行mainss() 的行,一切都应该正常了。

【讨论】:

  • 我认为它和我使用os.getcwd()时在同一个目录下,它返回了保存mianss_script.py的文件夹。此外,当我直接使用 %%bash 运行文件时,它可以工作。不知何故,导入只是没有。
  • %%writefile mianss_script.py 是否在 mianss_script.py 的顶部?如果是这样,请将其删除。
  • @KarenJiang 在启动 IPython 后您是否也将cd 放入您的当前目录?该代码对我有用。只要文件在正确的位置,导入就没有问题。
  • 我把它删了,之后就没有cd回来了。
  • 我添加一行:import sys sys.path.insert(0, "/home/nbuser/library/command_line/mainss_script.py") import mainss_script mainss_script.mainss()