2017-02-12 24 views
0

这是我第一次使用Travis和“测试”。 我创建了一些测试,现在我想将它们添加到Travis中,但是我遇到了PATH问题。[Python]无法让Travis CI工作。路径问题

以下是我有:

sheetmaker/ 
     html_builder.py 
     constants.py 
     sheetmaker.py 
tests/ 
     test_html_builder.py 
     data/ 
       test_html_constants.py 

我管理运行test_html_builder.py和测试在我的电脑正常工作。总之这是我如何进口的东西,在test_html_builder.py

sys.path.insert(0, os.path.abspath('..')) 
from sheetmaker import html_builder 
from data import test_html_constants 

这在当地工作,但特拉维斯CI说:

  • 从sheetmaker进口html_builder
  • ModuleNotFoundError:无模块命名为“ sheetmaker”

什么是进口的东西以正确的方式?下面是详细信息GitHub的项目:github project!

在此先感谢。

+1

我会建议,而不是从上面'test_html_builder.py'的目录中工作,并运行'蟒蛇-m tests.test_html_builder',这会给你一个更真实的运行环境,并在本地和Travis-CI工作没有用'sys.path'打乱。 [这里有一些关于为什么你应该几乎总是这样做的额外阅读](https://github.com/asottile/scratch/wiki/PythonPathSadness) –

+0

您需要在sheetmaker目录中有一个'__init __。py'。 – erip

+0

@erip在我的情况下,我有一个__init__.py文件已经在我想导入模块的目录中,而Travis仍然无法找到它。我会尝试上传显示此视频的视频。 –

回答

2

之后万吨的研究,我开始打印print(sys.path)找出“我的工作”。从那里我创建了一个异常处理程序

try: 
    sys.path.insert(0, os.path.abspath('..')) #Works for local 
    from sheetmaker import html_builder 
    from data import test_html_constants 
except: 
    sys.path.insert(0, os.path.abspath('.')) #Works for Travis CI 
    from sheetmaker import html_builder 
    from data import test_html_constants 

这是导入模块的正确方法吗?不知道,但它的作品。

1

@ cosme12我没有尝试您的解决方案,但我可以通过在.travis.yml明确声明PYTHONPATH来解决路径问题

样品.travis.yml:

sudo: false 
language: python 

python: 
    - "3.6" 

install: 
    - export PYTHONPATH=$PYTHONPATH:$(pwd)/src/thermo 
    - python3 setup.py install 

script: 
    - pytest -s 

只需手动添加缺少的路径到.travis.yml和travis应该工作。

我喜欢这个解决方案,因为你不需要改变你的代码,只是特拉维斯配置文件。