到目前为止,在我发现并解决的bug中,我的实际代码非常干净,运行良好。我想我已经缩小了一个问题,我必须以下。。。我有一个文件夹“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
我已经尝试了以上两种解决方案在我的头,他们似乎都不工作。如果我正在调用这个文件,那么它的运行方式是否应该与我自己运行时的运行方式相同?如果一个解决方案不能从上述信息,那么我很抱歉浪费你的时间,我有这么多的工作要做
你至少有多个问题。从这里开始:
您的目录名为
PullStock
,但您正在尝试使用名称StockList
。这显然行不通但是,即使解决了这个问题,也有一个更大的问题:
StockList
不是一个包。在python2中(看起来您正在使用),如果目录中有一个名为__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系统上运行相同的代码
如果您想使用多个文件组织并创建包和导入模块,您应该看看Python Doc中的教程https://docs.python.org/2.7/tutorial/modules.html#packages
在那里你会发现一个很好的解释,你应该如何组织你的包,你需要添加什么作为文件(\uu init\uuuuuuuy.py),使该文件夹被识别为一个模块…等等
相关问题 更多 >
编程相关推荐