Esempio n. 1
0
def test_pex_executable():
    # Tests that pex keeps executable permissions
    with temporary_dir() as temp_dir:
        pex_dir = os.path.join(temp_dir, 'pex_dir')
        safe_mkdir(pex_dir)

        with open(os.path.join(pex_dir, 'exe.py'), 'w') as fp:
            fp.write(
                textwrap.dedent('''
               import subprocess
               import os
               import sys
               import my_package
               path = os.path.join(os.path.dirname(my_package.__file__), 'bin/start.sh')
               sys.stdout.write(subprocess.check_output([path]).decode('utf-8'))      
               '''))

        project_content = {
            'setup.py':
            textwrap.dedent('''
          from setuptools import setup

          setup(
              name='my_project',
              version='0.0.0.0',
              zip_safe=True,
              packages=['my_package'],
              package_data={'my_package': ['bin/*']},
              install_requires=[],
          )
      '''),
            'my_package/__init__.py':
            0,
            'my_package/bin/start.sh': ("#!/usr/bin/env bash\n"
                                        "echo 'hello world from start.sh!'"),
            'my_package/my_module.py':
            'def do_something():\n  print("hello world!")\n',
        }
        pex_builder = PEXBuilder(path=pex_dir)
        with temporary_content(project_content, perms=0o755) as project_dir:
            installer = WheelInstaller(project_dir)
            bdist = DistributionHelper.distribution_from_path(
                installer.bdist())
            pex_builder.add_dist_location(bdist.location)
            pex_builder.set_executable(os.path.join(pex_dir, 'exe.py'))
            pex_builder.freeze()

            app_pex = os.path.join(os.path.join(temp_dir, 'out_pex_dir'),
                                   'app.pex')
            pex_builder.build(app_pex)
            std_out, rc = run_simple_pex(
                app_pex, env={'PEX_ROOT': os.path.join(temp_dir, '.pex')})
            assert rc == 0
            assert std_out.decode('utf-8') == 'hello world from start.sh!\n'
Esempio n. 2
0
def pythonpath_isolation_test():
    with temporary_dir() as temp_dir:
        pythonpath = os.path.join(temp_dir, 'one')
        with safe_open(os.path.join(pythonpath, 'foo.py'), 'w') as fp:
            fp.write('BAR = 42')
        with safe_open(os.path.join(pythonpath, 'bar.py'), 'w') as fp:
            fp.write('FOO = 137')

        dist_content = {
            'setup.py':
            textwrap.dedent("""
        from setuptools import setup

        setup(
          name='foo',
          version='0.0.0',
          zip_safe=True,
          packages=['foo'],
          install_requires=[],
        )
      """),
            'foo/__init__.py':
            'BAR = 137',
        }

        with temporary_content(dist_content) as project_dir:
            installer = WheelInstaller(project_dir)
            foo_bdist = DistributionHelper.distribution_from_path(
                installer.bdist())

            exe_contents = textwrap.dedent("""
        import sys
        
        try:
          import bar
        except ImportError:
          import collections
          bar = collections.namedtuple('bar', ['FOO'])(None)
  
        import foo
                  
        sys.stdout.write("foo.BAR={} bar.FOO={}".format(foo.BAR, bar.FOO))
      """)

            yield PythonpathIsolationTest(pythonpath=pythonpath,
                                          dists=[foo_bdist],
                                          exe=exe_contents)