我正在尝试用Python构建一个简单的项目,但是,尽管一遍又一遍地阅读文档并阅读示例代码,但我似乎无法理解它是如何完成的。
我是Python的半新手,只有单文件脚本的背景。 但是,我使用多个文件夹和包制作了许多Node.js和Java项目。 在Python中但是我似乎无法掌握项目结构和工作流机制 - init .py,virtualenvs,setuptools等等。这对我来说似乎非常陌生和不直观,损害了我的整体生产力(具有讽刺意味的是Python)应该是一种旨在提高生产力的语言,对吗?)
我的项目有这个示例结构:
package_test (package)
|
|------- __init__.py
|------- main.py (entry point)
|
|------- /lib (modules)
| |
| |----- __init__.py
| |----- lib.py
|
|------- /Tests
| |
| |----- __init__.py
| |----- test.py
在main.py中:
from lib import lib
lib.libtest()
lib.py中的:
def libtest():
print("libtest")
在test.py中:
from lib import lib
lib.libtest()
运行main.py有效,但运行test.py时无法找到该模块。我尝试了一些解决方案,比如附加到sys.path,在lib之前加上'..',而且更多 - 没有用过。
这只是一个例子,但我希望将来在Python中使用多个子文件夹开发更复杂的项目(我认为Python有一些很酷的功能和很好的库),但这个问题一直困扰着我。在使用Java或Node开发时,我从来没有考虑过这些问题,更不用说virtualenv等内容。
先谢谢你
答案 0 :(得分:0)
你的test.py需要知道lib.py在它上面一层,在lib文件夹里面。所以你需要做的就是在运行lib.py导入到test.py之前附加lib文件夹的路径。像
这样的东西import sys
sys.path.append("..//lib")
import lib
请注意,上面的答案假定您在Windows上运行。更全面的方法是用适当的os.path语法替换windows路径。此代码的另一个假设是,您将从其文件夹中运行test.py,而不是使用绝对/相对路径。
import sys
import os.path
sys.path.append(os.path.join(os.path.pardir, 'lib'))
import lib
如果您想使用路径运行test.py,您的代码可能如下所示:
import sys
import os.path
# os.path.abspath(__file__) gets the absolute path of the current python scrip
# os.path.dirname gets the absolute path of whatever file you ask it to (minus the filename)
# The line below appends the full path of your lib folder to the current script's path
sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), os.path.pardir, 'lib'))
# This should allow test.py to import libtest regardless of where your run it from. Assuming your provided project structure.
from lib import libtest
libtest()