【问题标题】:Python: program called from another file not running correctlyPython:从另一个文件调用的程序未正确运行
【发布时间】:2015-05-11 03:39:36
【问题描述】:

到目前为止,在我发现并解决的错误中,我的实际代码非常干净并且运行良好。我想我已经缩小了以下问题的范围……我有一个文件夹“Stocks”,其中包含 Python 代码和另一个嵌套文件夹“PullStock”,其中包含更多 Python 代码和文本文件。

文件系统示例:

Folder: Stocks
  python code files (`stockcalc.py`)
  Folder: PullStock
    python code files (`pullList.py`)
    text files

我可以自己运行程序pullList.py,它运行良好。它所做的只是解析文本文件的行并将变量存储到数组中。我单独运行这个程序时的输出如下:

array length in pullList:  2

现在,当我运行 stockcalc.py 时,我从文件夹“PullStock”导入文件 pullList.py,但它的运行方式不同。输出如下:

array length in pullList:  0

stockcalc.py 的标题如下所示:

#!/usr/bin/env python
from PullStock import pullList
#import PullStock.pullList

我已经在我的标题中尝试了上述两种解决方案,但它们似乎都不起作用。如果我正在调用该文件,那么它不应该与我自己运行它时一样运行吗?如果无法从以上信息中找出解决方案,那么很抱歉浪费您的时间,我还有很多工作要做。

【问题讨论】:

    标签: python import filesystems directory


    【解决方案1】:

    您至少有多个问题。从这里开始:

    from StockList import pullList
    

    您的目录名为PullStock,但您尝试使用名称StockList。这显然行不通。

    但是,即使你解决了这个问题,你也会遇到一个更大的问题:StockList 不是一个包。在 Python 2(看起来您正在使用)中,如果目录中有一个名为 __init__.py 的文件,则它只是一个包。它可以是空的,但它必须存在。

    在包目录中运行脚本几乎总是错误的,因此通过修复它,您也破坏了有效的部分。无论如何你可能会侥幸成功,但你应该寻找一个更好的组织——例如,一个__main__.py 文件,可以让你将包作为脚本运行,或者在顶层使用“启动器”脚本。

    如果pullList.py 正在打开'spam.txt''eggs.txt' 并且只是期望它能够工作,那么当你的工作目录不工作时它就不会工作脚本的目录;您需要将scriptdir = os.path.abspath(os.path.dirname(sys.argv[0])) 添加到脚本顶部,然后使用os.path.join(scriptdir, 'spam.txt') 等。

    最后,为您的模块使用全小写的名称通常是个好主意。特别是如果您希望在 Windows 和非 Windows 系统上运行相同的代码。

    【讨论】:

    • 啊,我的错,我编辑了上面的导入...应该是from PullStock import pullList。无论如何,我正在运行python3.4。所以,你是说我必须在我的stockcalc.pypullList.py 中实现这些代码行吗?
    • @young_buffet:首先,如果您使用的是 3.4,您可能应该使用 #!/usr/bin/env python3,而不是 #!/usr/bin/env python(除非您使用的是 Arch Linux,我很确定您是不是)。同时,我不知道您所说的“将这些代码行实现为……”是什么意思。
    • 首先,感谢您提供的额外提示。我现在正在向你学习很多东西。我正在运行 ubuntu 12.04。我的意思是scriptdir = ... 代码行。根据上面列出的文件系统,我应该将这些行实现到哪个文件中?或者我面临的问题的另一种解决方案是什么?
    • 您在scriptdir 中放入的确切内容以及放入的位置取决于您的代码,以及您选择如何处理前面的问题,等等。您是否了解当前工作目录是什么,您是否阅读过abspathdirpathargv 上的文档以了解他们在做什么?如果是这样,应该很容易弄清楚你的代码需要什么。
    【解决方案2】:

    如果您想使用多个文件组织并创建包和导入模块,您应该查看 Python Doc 中的教程。 https://docs.python.org/2.7/tutorial/modules.html#packages

    在那里你会找到一个很好的解释,说明你应该如何组织你的包以及你需要添加什么文件(__init__.py)以使该文件夹被识别为一个模块......等等。

    【讨论】:

      猜你喜欢
      • 2021-04-17
      • 1970-01-01
      • 2023-03-30
      • 2019-02-20
      • 1970-01-01
      • 1970-01-01
      • 2012-07-06
      • 1970-01-01
      • 2011-10-20
      相关资源
      最近更新 更多